2012-02-29 67 views
0

我有下面的代码为煎茶Touch2,当我运行它,我得到了错误,如煎茶触摸Nestedlist不能运行getDetailCard

Uncaught TypeError: Cannot read property 'attributes' of undefined

我见过很多类似的代码,我把对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' 
      ] 

}); 

回答

4

我得到了同样的错误。我修正了它,尝试类似的方法,通过用if语句来检查你的item对象是否为null。

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

首先你可能要使用:

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

getDetailCard只给你一个“项目”,如果你将要切换到detailcard(离开树为好),但运行在每个两倍当你在嵌套列表中切换时。

从我看到您正在设置的项目的详细视图。为什么不使用正确的事件:

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

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

例如record.parentNode.getData()。text

好处是,只有当你到达叶子时,才会触发它,而不是每次在嵌套列表中切换列表。