2015-11-04 19 views
7

web_tree_imageウィジェットを変更しようとしています。ちょうど列に小さな画像を表示するのではなく、ホバリングまたはクリックすると大きな画像が表示されます。これを実現するために、the documentationで説明されているように、start関数をオーバーライドして、ウィジェットがレンダリングされた後にコールバックを追加しようとしています。web.list.Columnのサブクラスに作成されたDOM要素にコールバックを追加します。

従って私はweb_tree_image.jsに次のコードを追加しました:

openerp.web_tree_image = function (instance) { 
    instance.web.list.Image = instance.web.list.Column.extend({ 
     // [...] 
     start: function() { 
      console.log("start called"); 
      // [... add callbacks ...] 
     }, 
     // [...] 
    }); 
}; 

はしかし、start関数が呼び出されることはありませんので、これは動作しません。

通常はstartが呼び出されるコードパスを完全には理解していませんが、web.list.Columnでは何とか違っているようです。

startを呼び出す必要がありますか、私は何か間違っていますか?または、DOM要素が作成された後にコードを実行する別の方法がありますか?

+0

'extend'の代わりに' include'を試してください。 – ChesuCR

+0

'include'でも動作しません。また、[documentation](https://www.odoo.com/documentation/8.0/reference/javascript.html#subclassing-widget)は、それが 'extend'で動作することを明確に述べています。 – ValarDohaeris

+0

私はOdooに慣れていませんが、ドキュメンテーションによると、* var my_widget = new MyWidget(this);で*インスタンスを作成し、*レンダリングし、 'my_widget.appendTo("。some-div。 ");' – Anonymous0day

答えて

-1

start関数が呼び出されていない理由を私はまだ分からないが、これが回避策です:

openerp.web_tree_image = function (instance) { 
    instance.web.list.Image = instance.web.list.Column.extend({ 
     // ... 
     format: function (row_data, options) { 
      // ... 
      window.setTimeout(function() { 
       console.log("DOM ready"); 
       // ... add callbacks ... 
      }, 0); 
      // ... 
     }, 
     // ... 
    }); 
}; 

タイムアウト0でイベントキューに追加することで、実行は、関連するDOM要素まで延期することができます説明されているように作成されているhere

-1

ドキュメントよると:新しいクラスには、次の方法で使用することができます

を:

// Create the instance 
var my_widget = new MyWidget(this); 
// Render and insert into DOM 
my_widget.appendTo(".some-div"); 

次の2行が実行されている(および任意の約束はappendToによって返された後に( )が解決されている場合)、ウィジェットは使用できる状態になります。


挿入方法は、ウィジェット自体を開始し、スタートの結果を返す

注()。

何らかの理由でこれらのメソッドを呼びたくない場合は、まずウィジェットでrender()を呼び出してからDOMに挿入して起動する必要があります。

+0

なぜdownvote? – Anonymous0day

+0

私の質問に記載されているケースでは、ウィジェットはXMLで定義されているツリービューの一部としてインスタンス化されています(実際には、フードの下では 'appendTo'関数が呼び出されます)。ウィジェットをインスタンス化して見るのに問題がないことに注意してください。問題は実際には 'start'が呼び出されないということだけです。 – ValarDohaeris

関連する問題