将回调添加到在web.list.Column的子类中创建的DOM元素

Val*_*ris 7 javascript callback openerp openerp-8 odoo-8

我正在尝试修改web_tree_image小部件.我希望在悬停或点击时显示更大的图像,而不是仅在列中显示小图像.为了实现这一点,我试图通过覆盖start函数来渲染窗口小部件后添加回调,如文档所述.

因此,我将以下代码添加到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 ...]
        },
        // [...]
    });
};
Run Code Online (Sandbox Code Playgroud)

但是,start从不调用该函数,因此这不起作用.

我还没有完全理解通常会start被调用的代码路径,但似乎它在某种程度上是不同的web.list.Column.

应该start打电话给我,我做错了什么?或者在创建DOM元素之后还有另一种执行代码的方法吗?

Val*_*ris -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);
            // ...
        },
        // ...
    });
};
Run Code Online (Sandbox Code Playgroud)

通过添加到超时为 0 的事件队列,可以推迟执行,直到创建了相关 DOM 元素,如此处所述