mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Avoid invalidation setting absent key to undefined
Fixes a test-breaking aspect of 60aa9f7, which is that while it made
setting an absent value to "undefined" work, doing so would cause an
invalidation that didn't happen before.
While we're at it, clean up the code and make sure that setting an
absent key to 'undefined' does invalidate "all()".
Unit tests in "session" and "reactive-dict" now pass.
This commit is contained in:
@@ -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});
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user