From ebfe3efbdde55276b4430d9fb463a7227b489e85 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Fri, 12 Dec 2014 15:12:59 -0800 Subject: [PATCH] CRM-15578 - crmUiSelect - Update to work with ngModel --- js/angular-crm-ui.js | 37 +++++++++---------- .../crmMailing2/field/msg_template_id.html | 4 +- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/js/angular-crm-ui.js b/js/angular-crm-ui.js index 1ea32df674..5e2dd818b9 100644 --- a/js/angular-crm-ui.js +++ b/js/angular-crm-ui.js @@ -313,42 +313,41 @@ }; }) - // usage: - .directive('crmUiSelect', function ($parse) { + // usage: + .directive('crmUiSelect', function ($parse, $timeout) { return { + require: '?ngModel', scope: { - crmUiSelect: '@', - crmUiSelectModel: '@', - crmUiSelectChange: '@' + crmUiSelect: '@' }, - link: function (scope, element, attrs) { - var model = $parse(attrs.crmUiSelectModel); - + link: function (scope, element, attrs, ngModel) { // In cases where UI initiates update, there may be an extra // call to refreshUI, but it doesn't create a cycle. - function refreshUI() { - $(element).select2('val', model(scope.$parent)); - } + ngModel.$render = function () { + $timeout(function () { + // ex: msg_template_id adds new item then selects it; use $timeout to ensure that + // new item is added before selection is made + $(element).select2('val', ngModel.$viewValue); + }); + }; function refreshModel() { - var oldValue = model(scope.$parent), newValue = $(element).select2('val'); + var oldValue = ngModel.$viewValue, newValue = $(element).select2('val'); if (oldValue != newValue) { - scope.$parent.$apply(function(){ - model.assign(scope.$parent, newValue); + scope.$parent.$apply(function () { + ngModel.$setViewValue(newValue); }); - if (attrs.crmUiSelectChange) { - scope.$parent.$eval(attrs.crmUiSelectChange); - } } } + function init() { // TODO watch select2-options var options = attrs.crmUiSelect ? scope.$parent.$eval(attrs.crmUiSelect) : {}; $(element).select2(options); $(element).on('change', refreshModel); - setTimeout(refreshUI, 0); - scope.$parent.$watch(attrs.crmUiSelectModel, refreshUI); + $timeout(ngModel.$render); } + init(); } }; diff --git a/partials/crmMailing2/field/msg_template_id.html b/partials/crmMailing2/field/msg_template_id.html index ff2e6cec01..f665d0edd1 100644 --- a/partials/crmMailing2/field/msg_template_id.html +++ b/partials/crmMailing2/field/msg_template_id.html @@ -2,8 +2,8 @@