[FIX] action buttons activated in editable o2m lists during or after row edition

bzr revid: xmo@openerp.com-20120625072046-29tg3vnnpkhj8fe9
This commit is contained in:
Xavier Morel 2012-06-25 09:20:46 +02:00
commit 9029f24d87
2 changed files with 33 additions and 15 deletions

View File

@ -512,7 +512,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
* record or saving an existing one depending on whether the record
* already has an id property.
*
* @param {Function} success callback on save success
* @param {Function} [success] callback on save success
* @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end)
*/
do_save: function(success, prepend_on_create) {
@ -2730,9 +2730,11 @@ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({
});
},
do_button_action: function (name, id, callback) {
var self = this;
var def = $.Deferred().then(callback).then(function() {self.o2m.view.reload();});
return this._super(name, id, _.bind(def.resolve, def));
var _super = _.bind(this._super, this);
this.o2m.view.do_save().then(function () {
_super(name, id, callback);
});
}
});
openerp.web.form.One2ManyList = openerp.web.ListView.List.extend({
@ -2743,11 +2745,24 @@ openerp.web.form.One2ManyList = openerp.web.ListView.List.extend({
render_row_as_form: function () {
var self = this;
return this._super.apply(this, arguments).then(function () {
// Replace the "Save Row" button with "Cancel Edition"
self.edition_form.$element
.undelegate('button.oe-edit-row-save', 'click')
.delegate('button.oe-edit-row-save', 'click', function () {
self.cancel_pending_edition();
});
// Overload execute_action on the edition form to perform a simple
// reload_record after the action is done, rather than fully
// reload the parent view (or something)
var _execute_action = self.edition_form.do_execute_action;
self.edition_form.do_execute_action = function (action, dataset, record_id, _callback) {
return _execute_action.call(this, action, dataset, record_id, function () {
self.view.reload_record(
self.view.records.get(record_id));
});
};
$(self.edition_form).bind('form-blur', function () {
if (self.__return_blur) {
delete self.__return_blur;

View File

@ -487,6 +487,19 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
reload: function () {
return this.reload_content();
},
reload_record: function (record) {
return this.dataset.read_ids(
[record.get('id')],
_.pluck(_(this.columns).filter(function (r) {
return r.tag === 'field';
}), 'name')
).then(function (records) {
_(records[0]).each(function (value, key) {
record.set(key, value, {silent: true});
});
record.trigger('change', record);
});
},
do_load_state: function(state, warm) {
var reload = false;
@ -1026,17 +1039,7 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
* @returns {$.Deferred} promise to the finalization of the reloading
*/
reload_record: function (record) {
return this.dataset.read_ids(
[record.get('id')],
_.pluck(_(this.columns).filter(function (r) {
return r.tag === 'field';
}), 'name')
).then(function (records) {
_(records[0]).each(function (value, key) {
record.set(key, value, {silent: true});
});
record.trigger('change', record);
});
return this.view.reload_record(record);
},
/**
* Renders a list record to HTML