Redirected onchange and save to a common operation
bzr revid: nicolas.vanhoren@openerp.com-20121031153946-zvmoh7g7rtc69pyc
This commit is contained in:
parent
00fc09890b
commit
2d93553e0d
|
@ -114,7 +114,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
});
|
||||
this.is_initialized = $.Deferred();
|
||||
this.mutating_mutex = new $.Mutex();
|
||||
this.on_change_mutex = new $.Mutex();
|
||||
this.on_change_list = [];
|
||||
this.save_list = [];
|
||||
this.reload_mutex = new $.Mutex();
|
||||
this.__clicked_inside = false;
|
||||
this.__blur_timeout = null;
|
||||
|
@ -492,7 +493,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
},
|
||||
do_onchange: function(widget, processed) {
|
||||
var self = this;
|
||||
return this.on_change_mutex.exec(function() {
|
||||
this.on_change_list = [{widget: widget, processed: processed}].concat(this.on_change_list);
|
||||
return this._process_operations();
|
||||
},
|
||||
_process_onchange: function(on_change_obj) {
|
||||
var self = this;
|
||||
var widget = on_change_obj.widget;
|
||||
var processed = on_change_obj.processed;
|
||||
try {
|
||||
var def;
|
||||
processed = processed || [];
|
||||
|
@ -552,7 +559,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
instance.webclient.crashmanager.show_message(e);
|
||||
return $.Deferred().reject();
|
||||
}
|
||||
});
|
||||
},
|
||||
on_processed_onchange: function(result, processed) {
|
||||
try {
|
||||
|
@ -588,6 +594,27 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
return $.Deferred().reject();
|
||||
}
|
||||
},
|
||||
_process_operations: function() {
|
||||
var self = this;
|
||||
return this.mutating_mutex.exec(function() {
|
||||
function iterate() {
|
||||
var on_change_obj = self.on_change_list.shift();
|
||||
if (on_change_obj) {
|
||||
return self._process_onchange(on_change_obj).pipe(function() {
|
||||
return iterate();
|
||||
});
|
||||
}
|
||||
var save_obj = self.save_list.pop();
|
||||
if (save_obj) {
|
||||
return self._process_save(save_obj).pipe(function() {
|
||||
return iterate.apply(null, arguments);
|
||||
});
|
||||
}
|
||||
return $.when.apply($, arguments);
|
||||
};
|
||||
return iterate();
|
||||
});
|
||||
},
|
||||
_internal_set_values: function(values, exclude) {
|
||||
exclude = exclude || [];
|
||||
for (var f in values) {
|
||||
|
@ -611,7 +638,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
},
|
||||
set_values: function(values) {
|
||||
var self = this;
|
||||
return this.on_change_mutex.exec(function() {
|
||||
return this.mutating_mutex.exec(function() {
|
||||
self._internal_set_values(values);
|
||||
});
|
||||
},
|
||||
|
@ -765,7 +792,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
*/
|
||||
save: function(prepend_on_create) {
|
||||
var self = this;
|
||||
return this.mutating_mutex.exec(function() { return self.is_initialized.pipe(function() {
|
||||
this.save_list.push({prepend_on_create: prepend_on_create});
|
||||
return this._process_operations();
|
||||
},
|
||||
_process_save: function(save_obj) {
|
||||
var self = this;
|
||||
var prepend_on_create = save_obj.prepend_on_create;
|
||||
try {
|
||||
var form_invalid = false,
|
||||
values = {},
|
||||
|
@ -814,7 +846,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
|||
console.error(e);
|
||||
return $.Deferred().reject();
|
||||
}
|
||||
});});
|
||||
},
|
||||
on_invalid: function() {
|
||||
var warnings = _(this.fields).chain()
|
||||
|
|
Loading…
Reference in New Issue