throw new Error("Setting 'id' attribute on existing record "
+ JSON.stringify(record.attributes));
}
+ // add record to dataset
+ self.dataset.ids.splice(
+ self.records.indexOf(record), 0, value);
// Set id on new record
$row = self.$current.children('tr:not([data-id])');
} else {
return this;
},
- _onRecordEvent: function (event, record, options) {
+ _onRecordEvent: function (event) {
+ switch(event) {
// don't propagate reset events
- if (event === 'reset') { return; }
+ case 'reset': return;
+ case 'change:id':
+ var record = arguments[1];
+ var new_value = arguments[2];
+ var old_value = arguments[3];
+ // [change:id, record, new_value, old_value]
+ if (this._byId[old_value] === record) {
+ delete this._byId[old_value];
+ this._byId[new_value] = record;
+ }
+ break;
+ }
this.trigger.apply(this, arguments);
},
ids, [1, 2, 3, 10, 20, 30],
'tree collections should be deeply iterated');
});
+
+ module("list-weirds", {
+ setup: function () {
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.chrome(openerp);
+ // views loader stuff
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
+ window.openerp.web.list(openerp);
+ }
+ });
+ test('set-from-noid', function () {
+ var root = new openerp.web.list.Collection();
+ root.add({v: 3});
+ root.at(0).set('id', 42);
+ var record = root.get(42);
+ equal(root.length, 1);
+ equal(record.get('v'), 3, "should have fetched the original record");
+ });
+ test('set-from-previd', function () {
+ var root = new openerp.web.list.Collection();
+ root.add({id: 1, v: 2});
+ root.get(1).set('id', 42);
+ var record = root.get(42);
+ equal(root.length, 1);
+ equal(record.get('v'), 2, "should have fetched the original record");
+ });
});