diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js index f19375a4aca..b4576dffa38 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -368,24 +368,11 @@ var FormRenderer = BasicRenderer.extend({ * @returns {jQueryElement} */ _renderInnerGroupField: function (node) { - var self = this; var widget = this._renderFieldWidget(node, this.state); - var fieldName = node.attrs.name; var $tds = $('').append(widget.$el); if (node.attrs.nolabel !== '1') { - var $labelTd = this._renderInnerGroupLabel(node, { - callback: function (element, modifiers, record) { - var widgets = self.allFieldWidgets[record.id]; - element.$el.toggleClass('o_form_label_empty', !!( // FIXME condition is evaluated twice (label AND widget...) - record.data.id - && (modifiers.readonly || self.mode === 'readonly') - // The widget could have been rerendered so we have to - // search it in the list with the field name - && !_.findWhere(widgets, {name: fieldName}).isSet() - )); - }, - }); + var $labelTd = this._renderInnerGroupLabel(node); $tds = $labelTd.add($tds); } @@ -394,12 +381,11 @@ var FormRenderer = BasicRenderer.extend({ /** * @private * @param {string} label - * @param {Object} [modifiersOptions] * @returns {jQueryElement} */ - _renderInnerGroupLabel: function (label, modifiersOptions) { + _renderInnerGroupLabel: function (label) { return $('', {class: 'o_td_label'}) - .append(this._renderTagLabel(label, modifiersOptions)); + .append(this._renderTagLabel(label)); }, /** * Render a node, from the arch of the view. It is a generic method, that @@ -566,10 +552,10 @@ var FormRenderer = BasicRenderer.extend({ /** * @private * @param {Object} node - * @param {Object} [modifiersOptions] * @returns {jQueryElement} */ - _renderTagLabel: function (node, modifiersOptions) { + _renderTagLabel: function (node) { + var self = this; var text; var fieldName = node.tag === 'label' ? node.attrs.for : node.attrs.name; if ('string' in node.attrs) { // allow empty string @@ -587,6 +573,31 @@ var FormRenderer = BasicRenderer.extend({ if (node.tag === 'label') { this._handleAttributes($result, node); } + var modifiersOptions; + if (fieldName) { + modifiersOptions = { + callback: function (element, modifiers, record) { + var widgets = self.allFieldWidgets[record.id]; + var widget = _.findWhere(widgets, {name: fieldName}); + if (!widget) { + return; // FIXME this occurs if the widget is created + // after the label (explicit