From: Tim Otten Date: Thu, 26 Feb 2015 23:30:15 +0000 (-0700) Subject: CRM-15854 - crmMailing - Fix initialization of scope.mailing X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=d70e482e08f9575475bfe93c410db282b6177c01;p=civicrm-core.git CRM-15854 - crmMailing - Fix initialization of scope.mailing --- 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 //