From d70e482e08f9575475bfe93c410db282b6177c01 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Thu, 26 Feb 2015 16:30:15 -0700 Subject: [PATCH] CRM-15854 - crmMailing - Fix initialization of scope.mailing --- js/angular-crmMailing/directives.js | 39 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/js/angular-crmMailing/directives.js b/js/angular-crmMailing/directives.js index 0e13b86862..f217a93253 100644 --- a/js/angular-crmMailing/directives.js +++ b/js/angular-crmMailing/directives.js @@ -15,15 +15,16 @@ crmMailingBodyText: '~/crmMailing/body_text.html' }; _.each(simpleBlocks, function(templateUrl, directiveName){ - angular.module('crmMailing').directive(directiveName, function ($parse) { + angular.module('crmMailing').directive(directiveName, function () { return { scope: { crmMailing: '@' }, templateUrl: templateUrl, link: function (scope, elm, attr) { - var model = $parse(attr.crmMailing); - scope.mailing = model(scope.$parent); + scope.$parent.$watch(attr.crmMailing, function(newValue){ + scope.mailing = newValue; + }); scope.crmMailingConst = CRM.crmMailing; scope.ts = CRM.ts(null); scope[directiveName] = attr[directiveName] ? scope.$parent.$eval(attr[directiveName]) : {}; @@ -34,12 +35,13 @@ // example:
// note: the directive defines a variable called "preview" with any inputs supplied by the user (e.g. the target recipient for an example mailing) - angular.module('crmMailing').directive('crmMailingBlockPreview', function ($parse) { + angular.module('crmMailing').directive('crmMailingBlockPreview', function () { return { templateUrl: '~/crmMailing/preview.html', link: function (scope, elm, attr) { - var mailingModel = $parse(attr.crmMailing); - scope.mailing = mailingModel(scope); + scope.$watch(attr.crmMailing, function(newValue){ + scope.mailing = newValue; + }); scope.crmMailingConst = CRM.crmMailing; scope.ts = CRM.ts(null); scope.testContact = {email: CRM.crmMailing.defaultTestEmail}; @@ -59,15 +61,16 @@ }; }); - angular.module('crmMailing').directive('crmMailingBlockReview', function ($parse, crmMailingPreviewMgr) { + angular.module('crmMailing').directive('crmMailingBlockReview', function (crmMailingPreviewMgr) { return { scope: { crmMailing: '@' }, templateUrl: '~/crmMailing/review.html', link: function (scope, elm, attr) { - var mailingModel = $parse(attr.crmMailing); - scope.mailing = mailingModel(scope.$parent); + scope.$parent.$watch(attr.crmMailing, function(newValue){ + scope.mailing = newValue; + }); scope.crmMailingConst = CRM.crmMailing; scope.ts = CRM.ts(null); scope.previewMailing = function previewMailing(mailing, mode) { @@ -81,15 +84,17 @@ // example: // NOTE: This really doesn't belong in a directive. I've tried (and failed) to make this work with a getterSetter binding, eg //