Sencha touch: невозможно получить ссылку на элементы на панели - PullRequest
0 голосов
/ 04 сентября 2011

Я пытаюсь заставить MVC работать в моем первом приложении и пытаюсь сменить карточку, щелкнув кнопку на панели инструментов.

Я получаю ошибку времени выполнения , когда я нажимаю кнопку "Привет" или "Мир" на панели инструментов: TypeError: Невозможно прочитать свойство 'items' из неопределенного в строке: var exerciseListPanel = this.items.items[0], // CODE ERRORS HERE!

У меня проблема с получением ссылки на элементы на панели, ПОЧЕМУ?

Вот полный код панели:

        MyApp.views.HomeScreenPanel = Ext.extend(Ext.Panel, {
        layout : 'card',
        cardSwitchAnimation: 'slide',
        initComponent : function() {
            this.dockedItems = this.buildDockedItems();
            this.items = this.buildItemList();
            MyApp.views.HomeScreenPanel.superclass.initComponent.call(this);
        },
        buildItemList : function(){
            return [
                new Ext.Panel({html:"hello"}),
                new Ext.Panel({html:"world"}),
            ];
        },
        buildDockedItems : function(){
            return [
                this.buildTopDockToolbar(),
                this.buildBottomDockToolbar(),
            ];
        },
        buildTopDockToolbar : function(){
            return {
                xtype : 'toolbar',
                dock  : 'top',
                title : 'My first MVC app',
            };
        },
        buildBottomDockToolbar : function(){
            return this.NavigationToolbar();
        },
        NavigationToolbar : function(){
            return{
                xtype : 'toolbar',
                dock : 'bottom',
                defaults : {
                    handler : this.NavigationToolbarHandler,
                    controller: 'NavigationBarController'
                },
                items : [
                {
                    text : 'hello',
                    action: 'hello'
                },
                {
                    text : 'world',
                    action : 'world'
                }]
            };
        },    
        NavigationToolbarHandler : function(btn) {

            var exerciseListPanel = this.items.items[0], // CODE ERRORS HERE!
                workoutListPanel  = this.items.items[1];

            Ext.dispatch({
                controller :     btn.controller,
                action :         btn.action,
               views : {
                    exerciseListPanel: exerciseListPanel,
                    workoutListPanel: workoutListPanel,
               }
            })
        },
    });

    Ext.reg('HomeScreenPanel',MyApp.views.HomeScreenPanel);

Here is the code for the controller but I don't there is a problem here:

Ext.regController('NavigationBarController', {
    world : function(dataObj) {
        Ext.Msg.alert(
            'world!',
            'world button pressed from toolbar',
            Ext.emptyFn
        );
        MyApp.views.HomeScreenPanel.setActiveItem(dataObj.views.worldPanel); // CORRECT SYNTAX????


    },
    hello : function(dataObj) {
        Ext.Msg.alert(
            'hello',
            'hello button pressed',
            Ext.emptyFn
        );
        MyApp.views.HomeScreenPanel.setActiveItem(dataObj.views.helloPanel); // CORRECT SYNTAX?????

    }
});

Ответы [ 2 ]

1 голос
/ 18 октября 2012

Items - это MixedCollection, поэтому используйте функцию get. http://docs.sencha.com/touch/1-1/#!/api/Ext.util.MixedCollection

MyApp.views.HomeScreenPanel.items.get(0);

Немного опоздал, но для кого-то еще гуглил в будущем;)

1 голос
/ 05 сентября 2011

Вероятно, это просто проблема объема попробуй:

exerciseListPanel = MyApp.views.HomeScreenPanel.items.items[0];

В этом контексте this, вероятно, кнопка.

...