0

私はこれに何日も取り組んできましたが、限られた 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 として表示されます。

どんな助けでも大歓迎です!!

4

1 に答える 1

0

まあ、私はそれを自分で修正しました、またはもっと良いことに、私は私が望んでいるように見える回避策を見つけました。

コンストラクターを一斉に捨てることになりました。

代わりに、「speakerName」キーと値のペアのapplyメソッドを上書きしました。

そこから、私は使用することができます:

this._items.items[0]._items.items[i].setWhatever(...)

アイテム内のコンテンツを設定します。

誰かがこれを行うための「本当の」方法を知っているなら、私はまだ入力を大いに感謝します!

于 2012-10-01T15:45:34.547 に答える