From c8c8d485c6f9aa1d93cdfae511e67b0e5e5f7f38 Mon Sep 17 00:00:00 2001 From: Pete Miller Date: Wed, 25 Nov 2015 14:09:35 -0800 Subject: [PATCH] When adding a rule, use 'peek' to check the existing rules, so any encapsulating subscriptions won't fire if the rules change --- src/api.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api.js b/src/api.js index d9c8ad02..eb6694de 100644 --- a/src/api.js +++ b/src/api.js @@ -268,11 +268,12 @@ // addRule: function (observable, rule) { observable.extend({ validatable: true }); - - var hasRule = !!ko.utils.arrayFirst(observable.rules(), function(item) { + //calculate if the observable already has this rule + //peek the set of rules so this function does not cause any encapsulating subsciptions to fire if the rules change + var hasRule = !!ko.utils.arrayFirst(observable.rules.peek(), function(item) { return item.rule && item.rule === rule.rule; }); - + //do not add the rule if it already exists on the observable if (!hasRule) { //push a Rule Context to the observables local array of Rule Contexts observable.rules.push(rule);