diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-04-05 16:28:52 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-04-06 10:32:08 +0300 |
commit | 7502eb7b53581b1e78f0b559498af9b877b7870f (patch) | |
tree | a7ccce19e1edd104c75da460fbf2acff63335f15 | |
parent | 979594ba229c4380fbafac35b78c1c2af8b85f97 (diff) | |
download | aconf-7502eb7b53581b1e78f0b559498af9b877b7870f.tar.bz2 aconf-7502eb7b53581b1e78f0b559498af9b877b7870f.tar.xz |
web client: track new collection members in transaction manager
-rw-r--r-- | web/transaction.js | 10 | ||||
-rw-r--r-- | web/widget/inline.js | 4 |
2 files changed, 8 insertions, 6 deletions
diff --git a/web/transaction.js b/web/transaction.js index 7f56a88..b4c9aa5 100644 --- a/web/transaction.js +++ b/web/transaction.js @@ -73,6 +73,11 @@ define( return _.isArray(data.data) ? name - 1 : name; } + function ensureKeyPresence(name) { + var key = index(name); + if (!(key in data.data)) data.data[key] = null; + } + function findSubordinateKeys(objmap, path) { return _.filter(_.keys(objmap), function(p) { return pth.isSubordinate(p, path); @@ -84,8 +89,7 @@ define( if (type.isCollection(data.meta) && !set) { var level = pth.split(path).length; _.each(findSubordinateKeys(invalid, path), function(p) { - var key = index(pth.split(p)[level]); - if (!(key in data.data) data.data[key] = null; + ensureKeyPresence(pth.split(p)[level]); }); } @@ -137,8 +141,8 @@ define( var mpath = pth.join(path, name); + ensureKeyPresence(name); var value = data.get(name, true); - if (value == undefined) value = null; var tn = _.isObject(newValue); var npv = tn ? mpath : newValue; diff --git a/web/widget/inline.js b/web/widget/inline.js index 01e36c0..25e1f24 100644 --- a/web/widget/inline.js +++ b/web/widget/inline.js @@ -29,7 +29,6 @@ define( if (!this.table) this.makeSortable(this.div); var self = this; - var keys = _.clone(_.keys(data.data)); var button = dom.button("Insert", function() { @@ -38,11 +37,10 @@ define( function insert() { var name = getter(); - if (_.contains(keys, name)) { + if (name in data.data) { statusBar.setError("Already exists: " + name); return; } - keys.push(name); data.set( name, type.isTreeNode(meta.members) ? {} : null |