【问题标题】:Sencha Touch Nestedlist cannot run getDetailCardSencha Touch Nestedlist 无法运行 getDetailCard
【发布时间】:2012-02-29 01:35:19
【问题描述】:

我有下面的 Sencha Touch2 代码,当我运行它时,我得到了类似的错误

未捕获的类型错误:无法读取未定义的属性“属性”

我见过很多类似的代码,就像我为 getDetailCard 编写的那样。为什么我的不能获得“属性”属性?

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'
           ]

});

【问题讨论】:

    标签: touch extjs


    【解决方案1】:

    我遇到了同样的错误。我修复了它,尝试类似的方法,用 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。

    【讨论】:

      【解决方案2】:

      首先你可能想使用:

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

      getDetailCard 仅在您即将切换到详细信息卡时才为您提供“项目”(永远离开树),但每次在嵌套列表中切换时运行两次。

      据我所知,您正在尝试为项目设置详细视图。为什么不使用正确的事件:

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

      当用户点击叶子列表项时触发。

      例如record.parentNode.getData().text

      好消息是,这只会在您到达叶子时触发,而不是每次在嵌套列表中切换列表时触发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多