我有一个数组
[object_1,object_2,object_n]
现在我想从中创建一个 Ext.util.MixedCollection 而无需先创建它然后添加数据。查看构造函数,没有能够实现这些的参数并将所有参数添加到 items 数组中,但这仍然需要键......
没有标准的方法来实现这一点,但有几个解决方案。
将函数的名称更改为您想要的任何名称,一切就绪。
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');
}
}
});
您是否尝试过针对您不希望的情况addAll()
使用自定义方法?getKey()
id