我需要覆盖其中一个Extjs类的本机构造函数。如果要更准确地说是Ext.ensible.cal.DragZone,它来自可扩展日历。
我尝试了什么,以及我找到了哪些解决方案
将所需的代码放到原始代码中,但我想避免原始代码修改。我希望将所有更改保留在一个地方
Ext.override - 它不起作用。无论如何都要调用本机构造函数
完全复制原始库中的代码,但我的更改。 Ext.ensible.cal.DragZone = Ext.extend(Ext.dd.DragZone,{..... }); 但这会导致一些其他意外错误,似乎并非所有功能都被调用(类的某些字段,似乎没有被正确初始化)。但是,如果我只是把这个代码而不是原始代码,一切正常(但请参阅#1)
通过扩展原始文件来创建我自己的Ext.ensible.cal.DragZone。这个方法的问题是,我需要检查库的所有代码,并覆盖和/或扩展使用这个DragZone的所有其他类,以使它们使用我的。
你能告诉我什么吗?对我来说,最正确的解决方案似乎只是构造函数重写。
我如何覆盖:
Ext.override(Ext.ensible.cal.DragZone, {
constructor : function () {
...
}
});
但正如我所说,原始构造函数被称为
答案 0 :(得分:1)
这是你可以尝试的hack,记住类名是构造函数,实际上没有生成的类的构造函数属性
Ext.ensible.cal.DragZone = function () {
// This is not very nice, it'd be better if you didn't have to
// assume what the parent is, but since we're already hacking it...
Ext.dd.DragZone.apply(this, arguments) ;
// Your code here
}
请注意,这不是我在评论中提到的安全方法,但应该有效
我建议您使用方法4,以便您的修改仅适用于选择使用它的类。