0

我需要覆盖 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 的所有其他类,以使它们使用我的。

所以你能给我建议吗?对我来说最正确的解决方案似乎只是构造函数覆盖。

我如何覆盖:

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

但正如我所说,原始构造函数被调用

4

1 回答 1

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

于 2013-07-10T08:10:11.970 回答