Extjs3.4如何覆盖构造函数

时间:2013-07-10 07:52:33

标签: javascript extjs extjs3

我需要覆盖其中一个Extjs类的本机构造函数。如果要更准确地说是Ext.ensible.cal.DragZone,它来自可扩展日历。

我尝试了什么,以及我找到了哪些解决方案

  1. 将所需的代码放到原始代码中,但我想避免原始代码修改。我希望将所有更改保留在一个地方

  2. Ext.override - 它不起作用。无论如何都要调用本机构造函数

  3. 完全复制原始库中的代码,但我的更改。 Ext.ensible.cal.DragZone = Ext.extend(Ext.dd.DragZone,{..... }); 但这会导致一些其他意外错误,似乎并非所有功能都被调用(类的某些字段,似乎没有被正确初始化)。但是,如果我只是把这个代码而不是原始代码,一切正常(但请参阅#1)

  4. 通过扩展原始文件来创建我自己的Ext.ensible.cal.DragZone。这个方法的问题是,我需要检查库的所有代码,并覆盖和/或扩展使用这个DragZone的所有其他类,以使它们使用我的。

  5. 你能告诉我什么吗?对我来说,最正确的解决方案似乎只是构造函数重写。

    我如何覆盖:

    Ext.override(Ext.ensible.cal.DragZone, {
        constructor : function () {
            ...
        }
    });
    

    但正如我所说,原始构造函数被称为

1 个答案:

答案 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,以便您的修改仅适用于选择使用它的类。