[FIX] web: properly apply onchange in some cases

A previous commit (8dbd1efef899fb637acca3c318ae99cb23838b8f) fixed a
part of the basicmodel that used _.each to iterate on an object with
field names as keys, which does not work when a field is named "length".
To fix it, I simply used a native for ... in statement.  However, I
missed the fact that there was a second 'return' statement in the body
of the closure given to _.each, so the onchange method returned
prematurely.

The fix is to simply use the continue statement in that case.

closes odoo/odoo#67267

X-original-commit: d9834e65ee57511f4850fa2d74287eb0b67087b9
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
This commit is contained in:
Géry Debongnie
2021-03-04 15:17:33 +00:00
parent 1ff825c012
commit 11d2e6dde5
2 changed files with 38 additions and 1 deletions
@@ -1779,7 +1779,8 @@ var BasicModel = AbstractModel.extend({
} else {
var fieldInfo = record.fieldsInfo[viewType][name];
if (!fieldInfo) {
return; // ignore changes of x2many not in view
// ignore changes of x2many not in view
continue;
}
var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];
list = self._makeDataPoint({
@@ -127,6 +127,42 @@ odoo.define('web.basic_model_tests', function (require) {
form.destroy();
});
QUnit.test('can process x2many commands (with multiple fields)', async function (assert) {
assert.expect(1);
this.data.partner.fields.product_ids.default = [[0, 0, { category: [] }]];
const form = await createView({
View: FormView,
model: 'partner',
data: this.data,
arch: `
<form>
<field name="product_ids"/>
</form>
`,
archs: {
'product,false,list': `
<tree>
<field name="display_name"/>
<field name="active"/>
</tree>
`,
},
mockRPC(route, args) {
if (args.method === "create") {
const product_ids = args.args[0].product_ids;
const values = product_ids[0][2];
assert.strictEqual(values.active, true, "active field should be set");
}
return this._super.apply(this, arguments);
},
});
await testUtils.form.clickSave(form);
form.destroy();
});
QUnit.test('can load a record', async function (assert) {
assert.expect(7);