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");