Add delete to ReactiveDict

This commit is contained in:
Robert Lowe
2015-07-12 23:37:39 -04:00
committed by David Greenspan
parent 2ab2ddedcc
commit 2ed8ff2a0a
2 changed files with 53 additions and 0 deletions

View File

@@ -62,3 +62,38 @@ Tinytest.add('ReactiveDict - clear() works', function (test) {
test.equal(equalsUndefined, true);
test.equal(all, {});
});
Tinytest.add('ReactiveDict - delete(key) works', function (test) {
var dict = new ReactiveDict;
dict.set('foo', 'bar');
dict.set('bar', 'foo');
var val, equals, equalsUndefined, all;
Tracker.autorun(function() {
val = dict.get('foo');
});
Tracker.autorun(function() {
equals = dict.equals('foo', 'bar');
});
Tracker.autorun(function() {
equalsUndefined = dict.equals('foo', undefined);
});
Tracker.autorun(function() {
all = dict.all();
});
test.equal(val, 'bar');
test.equal(equals, true);
test.equal(equalsUndefined, false);
test.equal(all, {foo: 'bar', bar: 'foo'});
dict.delete('foo');
Tracker.flush();
test.isUndefined(val);
test.equal(equals, false);
test.equal(equalsUndefined, true);
test.equal(all, {bar: 'foo'});
});

View File

@@ -166,6 +166,24 @@ _.extend(ReactiveDict.prototype, {
},
delete: function(key) {
var self = this;
var oldKeys = self.keys;
_.each(oldKeys, function(value, oldKey) {
if (key == oldKey){
changed(self.keyDeps[oldKey]);
changed(self.keyValueDeps[oldKey][value]);
changed(self.keyValueDeps[oldKey]['undefined']);
delete self.keys[oldKey]; // clean up
}
});
// trigger a change regardless if any matching key found...
self.allDeps.changed();
},
_setObject: function (object) {
var self = this;