[IMP] added field_changed mechanism

bzr revid: nicolas.vanhoren@openerp.com-20120924163021-ktfmi27q48o9moa8
This commit is contained in:
niv-openerp 2012-09-24 18:30:21 +02:00
parent 70a1aac877
commit 7d514372c0
1 changed files with 22 additions and 2 deletions

View File

@ -16,6 +16,14 @@ instance.web.form = {};
* Events:
* - view_content_has_changed : when the values of the fields have changed. When
* this event is triggered all fields should reprocess their modifiers.
* - field_changed:<field_name> : when the value of a field change, an event is triggered
* named "field_changed:<field_name>" with <field_name> replaced by the name of the field.
* This event is not related to the on_change mechanism of OpenERP and is always called
* when the value of a field is setted or changed. This event is only triggered when the
* value of the field is syntactically valid, but it can be triggered when the value
* is sematically invalid (ie, when a required field is false). It is possible that an event
* about a precise field is never triggered even if that field exists in the view, in that
* case the value of the field is assumed to be false.
*/
instance.web.form.FieldManagerMixin = {
/**
@ -26,6 +34,11 @@ instance.web.form.FieldManagerMixin = {
* Returns true when the view is in create mode.
*/
is_create_mode: function() {},
/**
* Returns the current value of a field present in the view. See the get_value() method
* method in FieldInterface for further information.
*/
get_field_value: function(field_name) {},
};
instance.web.views.add('form', 'instance.web.FormView');
@ -1056,6 +1069,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.translatable_fields.push(field);
}
field.on('changed_value', this, function() {
if (field.is_syntax_valid()) {
this.trigger('field_changed:' + name);
}
if (field._inhibit_on_change_flag) {
return;
}
@ -1073,6 +1089,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
is_create_mode: function() {
return this.get("actual_mode") === "create";
},
get_field_value: function(field_name) {
return this.fields[field_name].get_value();
},
});
/**
@ -1843,7 +1862,8 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
* - force_readonly: boolean, When it is true, the field should always appear
* in read only mode, no matter what the value of the "readonly" property can be.
* Events:
* - changed_value: triggered to inform the view to check on_changes
* - changed_value: triggered when the value of the field has changed. This can be due
* to a user interaction or a call to set_value().
*
*/
instance.web.form.FieldInterface = {
@ -3378,7 +3398,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
}, this));
},
is_syntax_valid: function() {
if (!this.viewmanager.views[this.viewmanager.active_view])
if (! this.viewmanager || ! this.viewmanager.views[this.viewmanager.active_view])
return true;
var view = this.viewmanager.views[this.viewmanager.active_view].controller;
switch (this.viewmanager.active_view) {