diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 8735a52c120..99f8b794348 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -1727,25 +1727,30 @@ openerp.web.form.FieldDate = openerp.web.form.FieldDatetime.extend({
}
});
-openerp.web.form.FieldText = openerp.web.form.AbstractField.extend({
+openerp.web.form.FieldText = openerp.web.form.AbstractField.extend(_.extend({}, openerp.web.form.ReinitializeFieldMixin, {
template: 'FieldText',
- start: function() {
- this._super.apply(this, arguments);
- this.$textarea = this.$element.find('textarea').change(this.on_ui_change);
- this.resized = false;
+ bind_events: function() {
+ this.$textarea = undefined;
+ if (!this.get("effective_readonly")) {
+ this.$textarea = this.$element.find('textarea').change(this.on_ui_change);
+ this.resized = false;
+ }
},
set_value: function(value) {
this._super.apply(this, arguments);
- var show_value = openerp.web.format_value(value, this, '');
- this.$textarea.val(show_value);
- if (!this.resized && this.view.options.resize_textareas) {
- this.do_resize(this.view.options.resize_textareas);
- this.resized = true;
- }
+ this.render_value();
},
- update_dom: function() {
- this._super.apply(this, arguments);
- this.$textarea.prop('readonly', this.readonly);
+ render_value: function() {
+ var show_value = openerp.web.format_value(this.value, this, '');
+ if (!this.get("effective_readonly")) {
+ this.$textarea.val(show_value);
+ if (!this.resized && this.view.options.resize_textareas) {
+ this.do_resize(this.view.options.resize_textareas);
+ this.resized = true;
+ }
+ } else {
+ this.$element.text(show_value);
+ }
},
set_value_from_ui: function() {
this.value = openerp.web.parse_value(this.$textarea.val(), this);
@@ -1753,11 +1758,13 @@ openerp.web.form.FieldText = openerp.web.form.AbstractField.extend({
},
validate: function() {
this.invalid = false;
- try {
- var value = openerp.web.parse_value(this.$textarea.val(), this, '');
- this.invalid = this.required && value === '';
- } catch(e) {
- this.invalid = true;
+ if (!this.get("effective_readonly")) {
+ try {
+ var value = openerp.web.parse_value(this.$textarea.val(), this, '');
+ this.invalid = this.required && value === '';
+ } catch(e) {
+ this.invalid = true;
+ }
}
},
focus: function($element) {
@@ -1786,7 +1793,7 @@ openerp.web.form.FieldText = openerp.web.form.AbstractField.extend({
reset: function() {
this.resized = false;
}
-});
+}));
openerp.web.form.FieldBoolean = openerp.web.form.AbstractField.extend({
template: 'FieldBoolean',
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 5d8aa5c704b..c8df69c2bdc 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -1002,12 +1002,14 @@
-
-
-
+
+
+
+
+