Сенча сенсорный набор ActiveItem логическое объяснение - PullRequest
0 голосов
/ 18 ноября 2011

(полное повторное редактирование моего предыдущего поста)

Я пытаюсь создать свое первое сенсорное приложение Sencha, и у меня возникла проблема.

В моем окне просмотра у меня есть 2 xtype: Home и ContainerListAdress.

Когда я нажимаю на значок ContainerListAdress, карта скользит в список.

вот мой код (в listcard.js):

    // My List view card

myAPP.views.ListAdressCard = Ext.extend(Ext.List, {
id:'listadresscard',
    styleHtmlContent: true,
    // cardSwitchAnimation: 'slide',
    // items: [{ xtype: 'detailcard' } ],
    store: myAPP.ListStore,
    itemTpl: '<div>{name}</div>',
    grouped: true,
    onItemDisclosure: function(){
            myAPP.views.containerlistadresscard.setActiveItem('detailcard');
            }
});


// My container for both the list and the detail view

myAPP.views.ContainerListAdressCard = Ext.extend(Ext.Panel, {
    id: "containerlistadresscard",
    iconCls: "search",
    styleHtmlContent: true,
    cardSwitchAnimation: 'slide',
    layout:'card',
    items: [{xtype:'listadresscard'}, {xtype:'detailcard'}]
});

Ext.reg('listadresscard', myAPP.views.ListAdressCard);
Ext.reg('containerlistadresscard', myAPP.views.ContainerListAdressCard);

Тогда в detailcard.js у меня есть

DetailcardToolbar = new Ext.Toolbar ({
    id:'detailbar',
    title: 'station',
    dock:'top'


});


myAPP.views.Detailcard = Ext.extend(Ext.Panel, {
    id: 'detailcard',
    styleHtmlContent: true,
    html: 'Made from coffee',
dockedItem:[DetailcardToolbar]

});

Ext.reg('detailcard', myAPP.views.Detailcard);

Моя ошибка

Uncaught TypeError: Cannot call method 'setActiveItem' of undefined

Если я вернул верблюжий контейнер, я получил

Uncaught TypeError: Object function (){h.apply(this,arguments)} has no method 'setActiveItem'

Но на карточку детали, которую я хочу установить активной, есть ссылка в контейнере?

Спасибо за вашу помощь.

--------------------------- EDIT ------------------- ---------

Я решил поместить все на одной странице, просто для ясности, но столкнулся с той же проблемой

var myAPPDetailcard = new Ext.Panel ({
    id: 'detailcard',
    styleHtmlContent: true,
    html: 'Made from coffee',
layout: 'fit'
});



var myAPPListAdressCard = new Ext.List ({
    id:'listadresscard',
    styleHtmlContent: true,
    store: myAPP.ListStore,
    itemTpl: '<div>{name}</div>',
    grouped: true,
    onItemDisclosure: function(){
            myAPP.views.ContainerListAdressCard.setActiveItem(myAPPDetailcard);
            }
});


// My container for both the list and the detail view

myAPP.views.ContainerListAdressCard = Ext.extend(Ext.Panel, {
    id: "containerlistadresscard",
    iconCls: "search",
    styleHtmlContent: true,
    cardSwitchAnimation: 'slide',
    layout:'card',
    items: [myAPPListAdressCard, myAPPDetailcard]
});

Ext.reg('containerlistadresscard', myAPP.views.ContainerListAdressCard);

1 Ответ

0 голосов
/ 18 ноября 2011

Нет, Ext.extend () определяет класс.Здесь вы создали класс следующим образом:

myAPP.views.ContainerListAdressCard = Ext.extend(Ext.Panel, {
    id: "containerlistadresscard",
    iconCls: "search",
    styleHtmlContent: true,
    cardSwitchAnimation: 'slide',
    layout:'card',
    items: [myAPPListAdressCard, myAPPDetailcard]
});

Затем вы создаете его экземпляр следующим образом:

var mainContainer = new myAPP.views.ContainerListAdressCard({
                         fullscreen : true
                    });

Вы можете вызвать setActiveItem() для этой переменной mainContainer,не по определению класса.

.....
onItemDisclosure: function(){
    mainContainer.setActiveItem(myAPPDetailcard);
}

Надеюсь, эта помощь.

...