[FIX] web: MonetaryField: rerender with currency
The MonetaryField can be rendered with or without a currency. The currency can change during the lifecyle of the widget (e.g. currency field in the view, whose value is set by an onchange). More precisely, the widget can be instantiated without currency, then a change on another field can trigger an onchange which sets the currency, and our monetary widget is re-rendered with a currency. Before this rev., this wasn't supported in edit mode because the $el's root node was different if there were a currency or not (it was an input if there were no currency, and a div containing an input and a span otherwise). This root node being rendered only once (at the creation of the widget), the widget wasn't re-rendered correctly if the currency was suddenly set or unset. This fix makes the widget behave uniformly whether or not there is a currency, so now it is always a div containing an input (and optionally a span if there is a currency).
This commit is contained in:
@@ -17,7 +17,6 @@ var dom = require('web.dom');
|
||||
var Domain = require('web.Domain');
|
||||
var DomainSelector = require('web.DomainSelector');
|
||||
var DomainSelectorDialog = require('web.DomainSelectorDialog');
|
||||
var field_utils = require('web.field_utils');
|
||||
var framework = require('web.framework');
|
||||
var session = require('web.session');
|
||||
var utils = require('web.utils');
|
||||
@@ -476,15 +475,14 @@ var FieldMonetary = InputField.extend({
|
||||
|
||||
this._setCurrency();
|
||||
|
||||
if (this.mode === 'edit' && this.currency) {
|
||||
if (this.mode === 'edit') {
|
||||
this.tagName = 'div';
|
||||
this.className += ' o_input';
|
||||
}
|
||||
|
||||
// use the formatFloat function in edit
|
||||
if (this.mode === 'edit') {
|
||||
// use the formatFloat function in edit
|
||||
this.formatType = 'float';
|
||||
}
|
||||
|
||||
this.formatOptions.currency = this.currency;
|
||||
this.formatOptions.digits = [16, 2];
|
||||
},
|
||||
@@ -514,20 +512,19 @@ var FieldMonetary = InputField.extend({
|
||||
* @private
|
||||
*/
|
||||
_renderEdit: function () {
|
||||
if (!this.currency) {
|
||||
this._super.apply(this, arguments);
|
||||
return;
|
||||
}
|
||||
|
||||
this.$el.empty();
|
||||
|
||||
// Prepare and add the input
|
||||
this._prepareInput().appendTo(this.$el);
|
||||
// prepare and add the currency symbol
|
||||
var $currencySymbol = $('<span>', {text: this.currency.symbol});
|
||||
if (this.currency.position === "after") {
|
||||
this.$el.append($currencySymbol);
|
||||
} else {
|
||||
this.$el.prepend($currencySymbol);
|
||||
|
||||
if (this.currency) {
|
||||
// Prepare and add the currency symbol
|
||||
var $currencySymbol = $('<span>', {text: this.currency.symbol});
|
||||
if (this.currency.position === "after") {
|
||||
this.$el.append($currencySymbol);
|
||||
} else {
|
||||
this.$el.prepend($currencySymbol);
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user