我正在尝试修改web_tree_image小部件.我希望在悬停或点击时显示更大的图像,而不是仅在列中显示小图像.为了实现这一点,我试图通过覆盖start函数在渲染窗口小部件后添加回调,如
the documentation中所述.
因此,我将以下代码添加到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函数,因此这不起作用.
我还没有完全理解通常会导致开始被调用的代码路径,但似乎web.list.Column在某种程度上是不同的.
应该开始打电话,我做错了什么?或者在创建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添加事件队列,可以推迟执行,直到已经按照here解释创建了相关的DOM元素.