私は配列を持っています
[object_1,object_2,object_n]
ここで、Ext.util.MixedCollection を最初に作成してからデータを追加する必要なく、そこから作成したいと考えています。コンストラクターを見ると、これらを実行できる引数はなく、すべてをアイテム配列に追加できますが、それでもキーが必要になります...
これを達成するための標準的な方法はありませんが、いくつかの解決策があります。
関数の名前を好きな名前に変更すれば、準備完了です。
MyApp.toMixedCollection = function (array, keyFn) {
var mc = new Ext.util.MixedCollection(false, keyFn);
mc.addAll(Ext.Array.from(array));
return mc;
};
Ext.util.MixedCollection
私はこのソリューションを自分で好みます。クラスを拡張すると、コンストラクターのパラメーターを 2 つの個別のパラメーターではなく、オブジェクトとして再定義できます。構成を使用して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