diff --git a/packages/reactive-dict/reactive-dict-tests.js b/packages/reactive-dict/reactive-dict-tests.js index 60b22cba8e..e0de4854c2 100644 --- a/packages/reactive-dict/reactive-dict-tests.js +++ b/packages/reactive-dict/reactive-dict-tests.js @@ -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'}); + +}); diff --git a/packages/reactive-dict/reactive-dict.js b/packages/reactive-dict/reactive-dict.js index 293d7126a1..5beb79d180 100644 --- a/packages/reactive-dict/reactive-dict.js +++ b/packages/reactive-dict/reactive-dict.js @@ -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;