2012-02-29 38 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

好處是,只有當你到達葉子時,纔會觸發它,而不是每次在嵌套列表中切換列表。