Вложенный список Sencha Touch не может запустить getDetailCard - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть код ниже для Sencha Touch2, когда я запускаю его, я получаю сообщение об ошибке, как

Uncaught TypeError: Невозможно прочитать свойство 'атрибуты' из неопределенного

Я видел много похожих кодов, которые я добавил для getDetailCard. Почему мой объект не может получить свойство "attribute"?

Ext.define('MyApp.view.MainTabPanel', {
    extend: 'Ext.tab.Panel',

    config: {
        tabBar: {
            docked: 'top'
        },
        items: [
            {
                xtype: 'container',
                title: 'Documents'
            },
            {
                xtype: 'nestedlist',
                itemId: 'newslist',
                ui: 'dark',
                displayField: 'title',
                store: 'NewsStoreXML',
                title: 'News',
                getDetailCard: function(item, parent) {
                    var itemData = item.attributes.record.data,
                    parentData = parent.attributes.record.data,
                    detailCard = new Ext.Panel({
                        scroll: 'vertical',
                        styleHtmlContent: true,
                        tpl: ["<h2>{text}</h2>","{content}"]
                    });
                    detailCard.update(itemData);
                    this.backButton.setText(parentData.text);
                    return detailCard;
                }
            },
            {
                xtype: 'container',
                title: 'Calendar'
            }
        ]
    },
    requires: [
               'Ext.dataview.NestedList',
               'Ext.TitleBar'
           ]

});

Ответы [ 2 ]

4 голосов
/ 12 декабря 2012

Я получил ту же ошибку.Я исправил это, попробуйте что-то подобное, окружив ваш код оператором if, который проверяет, не является ли ваш объект item пустым.

getDetailCard: function(item, parent) {
    if(item) {
       // do some job on item object here...
       var itemData = item.attributes.record.data,
    }
    var parentData = parent.attributes.record.data,
    detailCard = new Ext.Panel({
        scroll: 'vertical',
        styleHtmlContent: true,
        tpl: ["<h2>{text}</h2>","{content}"]
    });
    detailCard.update(itemData);
    this.backButton.setText(parentData.text);
    return detailCard;
}

Вы можете console.log (item) увидеть и понять, какэто построено.Для меня я могу получить текст, например, получив item.data.text.

1 голос
/ 21 февраля 2013

Прежде всего вы можете захотеть использовать:

this.backButton.setText(parentData.text);
==> useTitleAsBackText : true

getDetailCard дает вам «элемент» только в том случае, если вы собираетесь переключиться на карту подробностей (оставляя дерево навсегда), но запускается дваждыкаждый раз, когда вы переключаетесь во вложенный список.

Из того, что я вижу, вы пытаетесь установить подробный вид для элемента.Почему бы не использовать правильное событие:

leafitemtap( this, list, index, target, record, e, eOpts )

Запускается, когда пользователь касается элемента списка листьев.

Например, record.parentNode.getData (). Text

Хорошийдело в том, что это срабатывает только после того, как вы попадаете на лист, а не при каждом переключении списков внутри вложенного списка.

...