diff --git a/packages/reactive-dict/reactive-dict-tests.js b/packages/reactive-dict/reactive-dict-tests.js index 62fc38f5c7..1ef8ebb7da 100644 --- a/packages/reactive-dict/reactive-dict-tests.js +++ b/packages/reactive-dict/reactive-dict-tests.js @@ -29,6 +29,10 @@ Tinytest.add('ReactiveDict - all() works', function (test) { dict.set('foo', 'bar'); Tracker.flush(); test.equal(all, {foo: 'bar'}); + + dict.set('blah', undefined); + Tracker.flush(); + test.equal(all, {foo: 'bar', blah: undefined}); }); diff --git a/packages/reactive-dict/reactive-dict.js b/packages/reactive-dict/reactive-dict.js index e4a0a5c71b..d2b54b7c21 100644 --- a/packages/reactive-dict/reactive-dict.js +++ b/packages/reactive-dict/reactive-dict.js @@ -60,19 +60,22 @@ _.extend(ReactiveDict.prototype, { value = stringify(value); - var oldSerializedValue = 'undefined'; - if (_.has(self.keys, key)) { - oldSerializedValue = self.keys[key]; - if (value === oldSerializedValue) - return; - } + var keyExisted = _.has(self.keys, key); + var oldSerializedValue = keyExisted ? self.keys[key] : 'undefined'; + var isNewValue = (value !== oldSerializedValue); + self.keys[key] = value; - self.allDeps.changed(); - changed(self.keyDeps[key]); - if (self.keyValueDeps[key]) { - changed(self.keyValueDeps[key][oldSerializedValue]); - changed(self.keyValueDeps[key][value]); + if (isNewValue || !keyExisted) { + self.allDeps.changed(); + } + + if (isNewValue) { + changed(self.keyDeps[key]); + if (self.keyValueDeps[key]) { + changed(self.keyValueDeps[key][oldSerializedValue]); + changed(self.keyValueDeps[key][value]); + } } },