2017-10-04 5 views
2

ビューにwidgetが2つある場合。そして、あなたは最初のウィジェットで何かを行い、2番目のウィジェットを更新(display_fieldと呼ぶ)したいとします。 2番目のウィジェットにidentifierを含めるにはどうすればよいですか?OdooのウィジェットのJavascript識別子

は、例えばwidgetの拡張定義で:

local.FieldNewWidget = instance.web.form.AbstractField.extend({ 
    init: function(parent, options) { 
    }, 
    events: { 
     'click .oe_new_input_button': 'open_new_specific_form', 
    }, 
    start: function() { 
    }, 
    display_field: function() { 
    }, 
    render_value: function() { 
    }, 
    open_new_specific_form: function(event) { 
     var self = this; 

     var new_action = { 
      type: 'ir.actions.act_window', 
      name: $(event.target).data('name'), 
      res_model: $(event.target).data('data-model'), 
      res_id: $(event.target).data('res-id'), 
      view_mode: 'form', 
      view_type: 'form', 
      views: [[false, 'form']], 
      target: 'new', 
      context: { 
      }, 
      flags: {'form': {'action_buttons': true}}, 
     } 

     self.do_action(new_action, { 
      on_close: function() { 
       // I want to refresh (call display_field) the second widget here. 
       // What is the identifier for the second widget? 
      }, 
     }); 
    }, 
}); 

答えて

1

私はこれが機能すると思いますが、それは最善の解決策だ場合、私は知りません。私はすべてのウィジェットが(this.view)を使って魔女の視点を知っていると思う。特別なイベントを使用して1つのウィジェットからそれをトリガーし、他のウィジェットでそれを聞かないのはなぜですか?例えば

プロパティビューに変更をリッスンするウィジェットにイベントリスナーを登録します。

  //in first widget register the event listener: 
     this.view.on('property_name', this, this.your_method); 



     // in second widget trigger the event by setting the value 
     this.view.set('property_name', a_value); 

私はjavascriptのは、私はよりよいがあると思います、これはあなたのために働くなら、私に知らせてodooする新たなんですプロパティーをまったく変更せずにトリガーするイベントを使用することによって解決できます。

+0

ビュー内のイベントをトリガーする方法を例に挙げるといいでしょう –

+0

すべてのウィジェットのinitまたはstart関数にこの行を追加します。 – Cherif

+0

これはプログラムでビュープロパティを設定するためです。あなたがodooによって管理されている関係paretnの子を制動するので、残念ながら私はそれを気付かなかった –