summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/basic_fields.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-06-26 09:04:25 +0200
committerAaron Bohy <aab@odoo.com>2017-06-27 14:12:31 +0200
commit7ea6f653df0863e9c0dbaf0b07800c0277b962b1 (patch)
treea2111a89146312ce37f51814467f526bfa4b19ce /addons/web/static/src/js/fields/basic_fields.js
parent816a3cd2c1edeff2ffa2e90c0f8a25795804f84d (diff)
[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).
Diffstat (limited to 'addons/web/static/src/js/fields/basic_fields.js')
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js29
1 files changed, 13 insertions, 16 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 82970255b3e..f6e463c6da4 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -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);
+ }
}
},
/**