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

Javascript 向在web.list.Column的子类中创建的DOM元素添加回调,javascript,callback,openerp,odoo-8,openerp-8,Javascript,Callback,Openerp,Odoo 8,Openerp 8,我正在尝试修改web\u tree\u图像小部件。我希望在鼠标悬停或单击时显示一个较大的图像,而不是在列中显示一个较小的图像。为了实现这一点,我尝试在呈现小部件后添加回调,方法是覆盖start函数,如中所述 因此,我将以下代码添加到: 但是,从未调用start函数,因此这不起作用 我还没有完全理解通常导致调用start的代码路径,但是web.list.Column的代码路径似乎有所不同 是否应该调用start而我做错了什么?或者,在创建DOM元素之后,还有其他执行代码的方法吗?虽然我仍然不知道为

我正在尝试修改
web\u tree\u图像
小部件。我希望在鼠标悬停或单击时显示一个较大的图像,而不是在列中显示一个较小的图像。为了实现这一点,我尝试在呈现小部件后添加回调,方法是覆盖
start
函数,如中所述

因此,我将以下代码添加到:

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

我还没有完全理解通常导致调用
start
的代码路径,但是
web.list.Column
的代码路径似乎有所不同


是否应该调用
start
而我做错了什么?或者,在创建DOM元素之后,还有其他执行代码的方法吗?

虽然我仍然不知道为什么不调用
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元素。

根据文档:

然后可以以下列方式使用新类:

执行这两行之后(如果需要,appendTo()返回的任何承诺都已解决),小部件就可以使用了


注意

插入方法将启动小部件本身,并返回start()的结果

如果出于某种原因您不想调用这些方法,则必须首先在小部件上>调用render(),然后将其插入DOM并启动它


尝试使用
include
而不是
extend
它也不适用于
include
;此外,还明确指出它应该与
extend
一起工作。我不熟悉Odoo,但根据文档,您必须使用
var my_widget=new MyWidget(此)创建实例my_widget.appendTo(“.some div”)呈现并插入DOM
在我的问题中描述的情况下,小部件被实例化为xml中定义的树视图的一部分(实际上会在引擎盖下调用
appendTo
函数)。请注意,我在实例化和查看小部件时没有遇到问题,问题实际上只是没有调用
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);
            // ...
        },
        // ...
    });
};
// Create the instance
var my_widget = new MyWidget(this);
// Render and insert into DOM
my_widget.appendTo(".some-div");