summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js4
-rw-r--r--addons/web/static/src/js/views/form/form_view.js1
-rw-r--r--addons/web/static/test/views/form_tests.js41
3 files changed, 44 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 8ae01e87bbc..7d33d51257f 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1239,8 +1239,8 @@ var BasicModel = AbstractModel.extend({
var field = record.fields[name];
specs[name] = (field.onChange) || "";
_.each(field.views, function (view) {
- _.each(view.fields, function (field, subname) {
- specs[name + '.' + subname] = (field.onChange) || "";
+ _.each(view.fieldAttrs, function (field, subname) {
+ specs[name + '.' + subname] = (view.fields[subname].onChange) || "";
});
});
});
diff --git a/addons/web/static/src/js/views/form/form_view.js b/addons/web/static/src/js/views/form/form_view.js
index 3f397f64d9a..6578c7ada15 100644
--- a/addons/web/static/src/js/views/form/form_view.js
+++ b/addons/web/static/src/js/views/form/form_view.js
@@ -89,6 +89,7 @@ var FormView = BasicView.extend({
field.views[viewName === 'list' ? 'tree' : viewName] = view;
field.relatedFields = fieldView.view_fields;
field.fieldAttrs = fieldView.fieldAttrs;
+ view.fieldAttrs = fieldView.fieldAttrs;
}
}));
}
diff --git a/addons/web/static/test/views/form_tests.js b/addons/web/static/test/views/form_tests.js
index 8096982d3f7..80c60c4bc20 100644
--- a/addons/web/static/test/views/form_tests.js
+++ b/addons/web/static/test/views/form_tests.js
@@ -736,6 +736,47 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('onchange send only the present fields to the server', function (assert) {
+ assert.expect(1);
+ this.data.partner.records[0].product_id = false;
+ this.data.partner.onchanges.foo = function (obj) {
+ obj.foo = obj.foo + " alligator";
+ };
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="foo"/>' +
+ '<field name="p">' +
+ '<tree>' +
+ '<field name="bar"/>' +
+ '<field name="product_id"/>' +
+ '</tree>' +
+ '</field>' +
+ '<field name="timmy"/>' +
+ '</form>',
+ archs: {
+ "partner_type,false,list": '<tree><field name="name"/></tree>'
+ },
+ res_id: 1,
+ mockRPC: function (route, args) {
+ if (args.method === "onchange") {
+ assert.deepEqual(args.args[3],
+ {"foo": "1", "p": "", "p.bar": "", "p.product_id": "", "timmy": "", "timmy.name": ""},
+ "should send only the fields used in the views");
+ }
+ return this._super(route, args);
+ },
+ });
+
+ form.$buttons.find('.o_form_button_edit').click();
+ form.$('input:first').val("tralala").trigger('input');
+
+ form.destroy();
+ });
+
QUnit.test('evaluate in python field options', function (assert) {
assert.expect(1);