私はこれに何日も取り組んできましたが、限られた JS の知識が私を傷つけているようです。
Store ファイルの内容に基づいて、ST2 アプリケーションで動的な Ext.Carousel コンポーネントを作成しています。
それはすべてうまくいきますが、想像力に任せるためにとにかくコードを示します。
Ext.getStore('DeviceStore').load(
function(i) {
Ext.each(i, function(i) {
if (i._data.name == 'Audio Ring') {
var carousel = Ext.ComponentManager.get('speakerCarousel');
var items = [];
Ext.each(i.raw.speakers, function(speaker) {
items.push({
sci: Ext.create('SmartCore.view.SpeakerCarouselItem', {
speakerId: speaker.speakerid,
speakerName: speaker.speakername,
speakerEnabled: speaker.speakerenabled
})
});
});
carousel.setItems(items);
}
});
})
これで、適切な数のアイテムがカルーセルに追加されます。それらは表示されますが、指定したコンテンツはありません。
これはカルーセルそのものです:
Ext.define('SmartCore.view.SpeakerCarousel', {
extend: 'Ext.Carousel',
xtype: 'speakerCarousel',
config: {
id: 'speakerCarousel',
layout: 'fit',
listeners: {
activeitemchange: function(carousel, item) {
console.log(item);
}
}
}
});
これは、ストアからのデータを入力するアイテム クラスです。
Ext.define("SmartCore.view.SpeakerCarouselItem", {
extend: Ext.Panel,
xtype: 'speakerCarouselItem',
config: {
title:'SpeakerCarouselItem',
styleHtmlContent: true,
layout: 'fit'
},
constructor : function(param) {
this.callParent(param);
this.add(
{
layout: 'panel',
style: 'background-color: #759E60;',
html: 'hello'
}
)
}
});
繰り返しますが、カルーセルには正しい数のアイテムが表示されますが (11)、コンテンツは表示されず、背景色も変更されていません。ブラウザで console.log(item) を確認すると、項目はカルーセル オブジェクト内の innerItems として表示されます。
どんな助けでも大歓迎です!!