0

使用各种 JS ide,当使用 Ext.define 定义自定义对象时,它们都会丢失。通过原型(函数定义,然后是原型函数等)定义简单的 js 对象时,它们都可以正常工作。有没有替代 Ext.define 的重用和现有定义 - 装饰现有对象而不是定义它的东西?我什至不介意它是否不拾取基类的东西,我只关心我的定义——而且,我不需要动态加载,所以我不用担心加载顺序等。

作为记录,我看到有 Ext.extend,但我不想探索它,因为它已被弃用。

下面的例子:

function Uploader() {
}

Uploader.prototype.execute = function(url) {
    //do stuff here.
}

Ext.???(Uploader, {
    initComponent: function() {
        // handle ext specific stuff
    }
})
4

2 回答 2

1

以下是 mixin 的典型定义和使用方式。

Ext.define('Plain', {
    message: 'Hello prototype',
    say: function () {
        console.log(this.message);
    },
    hello: function () {
        console.log('hello guy!');
    }
});

Ext.define('PlainPanel', {
    extend: 'Ext.panel.Panel',
    mixins: {
        plain: 'Plain'
    },
    message: 'Hello Ext'
});

Ext.onReady(function () {
    var p2 = Ext.create('PlainPanel');
    p2.say();  // Hello Ext
    p2.hello();  // hello guy!
    console.log(p2);
});

与其将其定义mixins为数组,不如将其定义为一个对象,以便属性名称成为对该 mixin 的内部引用,而值是该 mixin 的类名。即使装饰类有自己的同名方法,这也允许您引用 mixin 的方法。

于 2013-10-29T13:37:03.790 回答
0

好的,在阅读了 mixins 之后,我有了一个可行的模式。

继续使用 define 来扩展您的 ext 对象(例如面板),并使用 mixins 数组添加您的原型对象。定义的类必须具有与原型不同的名称,否则 Ext 不会将其创建为定义。

这是演示该技术的代码块:

Ext.onReady(function(){

    var Plain = function() {
    }

    Plain.prototype.message = "Hello prototype";

    Plain.prototype.say = function() {
        console.log(this.message);
    }

    Plain.prototype.hello = function() {
        console.log("hello guy!");
    }

    var p = new Plain();
    p.say();

    Ext.define("PlainPanel", {
        message: "Hello Ext",
        extend: 'Ext.panel.Panel',
        mixins: [Plain]
    });

    var p2 = new PlainPanel();
    p2.say();
    p2.hello();
    console.log(p2);
});
于 2013-10-18T19:54:07.373 回答