1

我有一个数组

[object_1,object_2,object_n]

现在我想从中创建一个 Ext.util.MixedCollection 而无需先创建它然后添加数据。查看构造函数,没有能够实现这些的参数并将所有参数添加到 items 数组中,但这仍然需要键......

4

2 回答 2

4

没有标准的方法来实现这一点,但有几个解决方案。

工厂方法

将函数的名称更改为您想要的任何名称,一切就绪。

MyApp.toMixedCollection = function (array, keyFn) {
    var mc = new Ext.util.MixedCollection(false, keyFn);
    mc.addAll(Ext.Array.from(array));
    return mc;
};

延长Ext.util.MixedCollection

我自己更喜欢这个解决方案。扩展类允许您将构造函数参数重新定义为一个对象,而不是两个单独的参数。使用items配置在创建时加载对象。作为奖励,您还可以使用listeners文档中列出但实际上不起作用的配置。

Ext.define('MyApp.util.MixedCollection', {
    extend: 'Ext.util.MixedCollection',

    constructor: function (config) {
        var me = this;

        me.listeners = config.listeners;
        me.callParent([config.allowFunctions, config.keyFn]);

        if (config.items) {
            me.addAll(config.items);
        }
    }
});

// Example usage
var mc = new MyApp.util.MixedCollection({
    keyFn: function (o) {
        return o.name;
    },
    items: [{
        name: 'A',
        foo:  'bar'
    },{
        name: 'B',
        foo:  'quo'
    }],
    listeners: {
        add: function () {
            console.log('added an object');
        }
    }
});
于 2013-07-31T14:21:30.587 回答
2

您是否尝试过针对您不希望的情况addAll()使用自定义方法?getKey()id

于 2013-07-30T09:09:03.537 回答