From d6a9d86e098ede1cea51305334c2cfefd787f7df Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 2 Jul 2012 13:10:26 +0200 Subject: [PATCH] [FIX] change event handling for 'new' records (records w/o an id yet) bzr revid: xmo@openerp.com-20120702111026-twmh5gbg4i1fd4kj --- addons/web/static/src/js/view_list.js | 23 +++++++++++++------ .../web/static/src/js/view_list_editable.js | 3 ++- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 6c9e244c5e3..8cbe18a46cc 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -905,27 +905,36 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. this.record_callbacks = { 'remove': function (event, record) { - var $row = self.$current.find( + var $row = self.$current.children( '[data-id=' + record.get('id') + ']'); var index = $row.data('index'); $row.remove(); self.refresh_zebra(index); }, 'reset': function () { return self.on_records_reset(); }, - 'change': function (event, record) { - var $row = self.$current.find('[data-id=' + record.get('id') + ']'); + 'change': function (event, record, attribute, value, old_value) { + var $row; + if (attribute === 'id') { + if (old_value) { + throw new Error("Setting 'id' attribute on existing record " + + JSON.stringify(record.attributes)); + } + // Set id on new record + $row = self.$current.children('tr:not([data-id])'); + } else { + $row = self.$current.children( + '[data-id=' + record.get('id') + ']'); + } $row.replaceWith(self.render_record(record)); }, 'add': function (ev, records, record, index) { - var $new_row = $('').attr({ - 'data-id': record.get('id') - }); + var $new_row = $(self.render_record(record)); if (index === 0) { $new_row.prependTo(self.$current); } else { var previous_record = records.at(index-1), - $previous_sibling = self.$current.find( + $previous_sibling = self.$current.children( '[data-id=' + previous_record.get('id') + ']'); $new_row.insertAfter($previous_sibling); } diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index ac39f2c43e8..f35e667c35d 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -170,8 +170,9 @@ openerp.web.list_editable = function (instance) { record = self.records.find(function (r) { return !r.get('id'); }); - record.set('id', attrs.id, {silent: true}); + record.set('id', attrs.id); } + self.reload_record(record); }); },