【发布时间】:2016-04-02 08:03:31
【问题描述】:
我已经在 Odoo 中定义了当前自定义 javascript 视图的扩展:
openerp.account_move_journal_test = function(instance){
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.web.account.QuickAddListView.include({
init: function(){
this._super.apply(this, arguments);
console.log("QuickAddListView modified init")
},
});
};
现在为了更好地表示,我在QuickAddListView 和ListView 中添加了控制台登录,它们是使用_super 调用的父级。
所以如果我这样运行它,我会得到这些打印:
'ListView init' // This is parent of QuickAddListView
'QuickAddListView Init'
'QuickAddListView modified init'
构造函数的顺序是这个View -> ListView -> QuickAddListView
所以所有这些都按原样打印,但我想要修改init,使其直接调用ListView并跳过QuickAddListView原始init。
所以之后它应该只打印这个(意味着原始的 QuickAddListView init 没有被调用):
'ListView init' // This is parent of QuickAddListView
'QuickAddListView modified init'
在 javascript 中有没有一种方法可以指定您要调用的确切父级?因此,与其称所有内容都在一个链中,不如从您指定的位置开始(就像我的情况一样,来自ListView)?
例如在 Python 中,你可以这样做:
from some_module import SomeBaseClass
class CustomBase(SomeBaseClass):
def m1(self):
super(CustomBase, self).m1()
class Custom(CustomBase):
def m1(self):
# skip CustomBase
super(CustomBase, self).m1()
【问题讨论】:
-
this._super来自哪里?这通常不会奏效。 -
@Bergi 你是什么意思通常永远不会工作?它内置在 Odoo 中,用于模拟继承/扩展,例如在 Python 中。
-
啊,I see,那应该没问题。它仅在每次方法调用期间动态设置时才有效,就像它似乎由您的框架提供一样;这种方法不适用于每个实例上的常量
_super。
标签: javascript openerp odoo-8 super