2016-12-20 17 views
0

Я ищу метод, который делает поле невидимым для js (я создаю пользовательский виджет «InvisibleIfEmptry»). Я попытался переопределить метод _check_visibility при расширении FormWidget.AbstractField класса:Сделать поле невидимым через код js - ODOO 9

var core = require('web.core'), 
     form_common = require('web.form_common'); 
var InvisibleIfEmpty = form_common.AbstractField.extend({ 
start: function() { 
      this.on("change:effective_readonly", this, function() { 
       this._toggle_label(); 
       this._check_visibility(); 
      }); 
      this.render_value(); 
      this._toggle_label(); 
     }, 
_check_visibility: function() { 
      if (this.get("effective_readonly")) 
       this.$el.toggleClass('o_form_invisible',true); 
      } 
       this.$el.toggleClass('o_form_invisible',false); 
      } 
     }, ..... 

, но это делает значение невидимого только поле, а не этикетка. Мое предположение - изменить некоторые значения field_manager, но я не могу понять, какой из них?

Спасибо за вашу помощь :)

ответ

0

Вот мой JS код делает что:

odoo.define('myCustomModule', function(require) 
{ 
    'use strict'; 
    var core = require('web.core'), 
     form_common = require('web.form_common'), 
     form_view = require('web.FormView'); 

    form_common.AbstractField.include({ 

     start: function() { 

      this._super(); 
      // Check visibility logic below when content 
      // changes or the form swich to view mode 
      this.field_manager.on("view_content_has_changed", this, function() { 
       this._check_visibility(); 
      }); 
      this.on("change:effective_readonly", this, function() { 
       this._toggle_label(); 
       this._check_visibility(); 
     }); 
     }, 

     _check_visibility: function() { 

      // If the form is in view mode and the field is empty, 
      // make the field invisible 
      window.alert(this.); 
      if (this.field_manager.get("actual_mode") === "view") { 
       if(this.get("value") == false){ 
        this.$el.toggleClass('o_form_invisible',true); 
        this.$label.toggleClass('o_form_invisible',true); 
       }else{ 
        this.$el.toggleClass('o_form_invisible',this.get("effective_invisible")); 
        this.$label.toggleClass('o_form_invisible',this.get("effective_invisible")); 
       } 
      }else{ 
       this.$el.toggleClass('o_form_invisible',this.get("effective_invisible")); 
       this.$label.toggleClass('o_form_invisible',this.get("effective_invisible")); 
      } 
     }, 
    }); 

}); 

Но это относится ко всем моим модулям. Кто-нибудь знает, как получить имя модуля/модели от AbstractField?