diff options
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_model.js')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 33 |
1 files changed, 17 insertions, 16 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 276fd4df82b..d85f55ddf36 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1645,24 +1645,25 @@ var BasicModel = AbstractModel.extend({ var hasOnchange = false; var specs = {}; var fieldsInfo = record.fieldsInfo[viewType || record.viewType]; - - _.each(Object.keys(fieldsInfo), function (name) { - var field = record.fields[name]; - var fieldInfo = fieldsInfo[name]; - specs[name] = (field.onChange) || ""; - if (field.onChange) { - hasOnchange = true; - } - _.each(fieldInfo.views, function (view) { - _.each(view.fieldsInfo[view.type], function (field, subname) { - var onChange = view.fields[subname].onChange; - specs[name + '.' + subname] = onChange || ""; - if (onChange) { - hasOnchange = true; - } + generateSpecs(fieldsInfo, record.fields); + + // recursively generates the onchange specs for fields in fieldsInfo, + // and their subviews + function generateSpecs (fieldsInfo, fields, prefix) { + prefix = prefix || ''; + _.each(Object.keys(fieldsInfo), function (name) { + var field = fields[name]; + var fieldInfo = fieldsInfo[name]; + var key = prefix + name; + specs[key] = (field.onChange) || ""; + if (field.onChange) { + hasOnchange = true; + } + _.each(fieldInfo.views, function (view) { + generateSpecs(view.fieldsInfo[view.type], view.fields, key + '.'); }); }); - }); + } return hasOnchange ? specs : false; }, /** |
