[FIX] rendering of m2o selections after edition in editable lists

moved rendering of cell contents into JS to have more control (and simpler tests/dispatching. May also help the method getting JITed, with a bit o' luck)

bzr revid: xmo@openerp.com-20110708140655-lpbtriqto8tz2uxx
This commit is contained in:
Xavier Morel 2011-07-08 16:06:55 +02:00
parent ff19bed2b3
commit f5b72b6bcb
2 changed files with 38 additions and 16 deletions

View File

@ -637,7 +637,9 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
this.$current.remove();
}
this.$current = this.$_element.clone(true);
this.$current.empty().append(QWeb.render('ListView.rows', this));
this.$current.empty().append(
QWeb.render('ListView.rows', _.extend({
render_cell: this.render_cell}, this)));
},
/**
* Gets the ids of all currently selected records, if any
@ -767,9 +769,42 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
options: this.options,
row: this.rows[record_index],
row_parity: (record_index % 2 === 0) ? 'even' : 'odd',
row_index: record_index
row_index: record_index,
render_cell: this.render_cell
});
},
/**
* Formats the rendring of a given value based on its field type
*
* @param {Object} row_data record whose values should be displayed in the cell
* @param {Object} column column descriptor
* @param {"button"|"field"} column.tag base control type
* @param {String} column.type widget type for a field control
* @param {String} [column.string] button label
* @param {String} [column.icon] button icon
*/
render_cell: function (row_data, column) {
var attrs = column.modifiers_for(row_data);
if (attrs.invisible) { return ''; }
if (column.tag === 'button') {
return [
'<button type="button" title="', column.string || '', '">',
'<img src="/base/static/src/img/icons/', column.icon, '.png"',
' alt="', column.string || '', '"/>',
'</button>'
].join('')
}
var record = row_data[column.id];
if (record.value === false) { return ''; }
switch (column.type) {
case 'many2one':
// name_get value format
return record.value[1];
default:
return record.value;
}
},
/**
* Stops displaying the records matching the provided ids.
*

View File

@ -324,20 +324,7 @@
<td t-if="!column.meta and column.invisible !== '1'" t-att-title="column.help"
t-att-class="'oe-field-cell' + (align ? ' oe-number' : '')"
t-att-data-field="column.id">
<t t-set="attrs" t-value="column.modifiers_for(row.data)"/>
<t t-if="!attrs.invisible">
<t t-set="is_button" t-value="column.tag === 'button'"/>
<!-- TODO: get correct widget from form -->
<t t-if="!is_button and row['data'][column.id].value !== false">
<t t-set="value" t-value="row['data'][column.id].value"/>
<t t-esc="value instanceof Array ? value[1] : value"/>
</t>
<button type="button" t-att-title="column.string"
t-if="is_button">
<img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
t-att-alt="column.string"/>
</button>
</t>
<t t-raw="render_cell(row.data, column)"/>
</td>
</t>
<td t-if="options.deletable" class='oe-record-delete'>