2012-11-04 19 views
0

我試圖按照這裏給出的小貓例如 http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2#comment_form煎茶DataItem的數據圖setItems

我有複雜的部件,其中我的數據的屬性之一是對象的列表。我使用setItems方法將我的列表對象映射到Ext.Container。但是,它似乎並不奏效。在警報點,我得到的對象未定義。但是,如果我將setItems更改爲setText,則會獲取對象的字符串表示形式。有沒有人有什麼建議,我失蹤了?

Ext.define('MyListItem', { 

    extend: 'Ext.dataview.component.DataItem', 
    requires: ['Ext.Container'], 
    xtype: 'mylistitem', 

    config: { 
     sponsor: true, 
     dataMap: { 
      getSponsor: { 
       setItems: 'sponsor' 
      } 
     } 
    }, 

    applySponsor: function(config) { 
     // I put an alert here to see if I get getSponsor() but the object I get here is undefined 
     alert(this.getSponsor()); 
     return Ext.factory(config, Ext.Container, this.getSponsor()); 
    }, 

    updateSponsor: function(newNameButton, oldNameButton) { 
     if (oldNameButton) { 
      this.remove(oldNameButton); 
     } 

     if (newNameButton) { 
      this.add(newNameButton); 
     } 
    }, 

    onSponsorTap: function(button, e) { 
     var sponsors = record.get('sponsor'); 
     //my specific action 
    } 
}); 

Ext.define('MyApp.model.Sponsors', { 
    extend: 'Ext.data.Model', 
    xtype:'Sponsors_m', 
    config: { 
     fields: [ 
      {name: 'level', type: 'auto'}, 
      {name: 'id', type: 'int'}, 
      {name: 'sponsor', type: 'Sponsor'} 
     ] 
    } 
}); 

Ext.define('MyApp.model.Sponsor', { 
    extend: 'Ext.data.Model', 
    xtype:'Sponsor_m', 
    config: { 
     fields: [ 
      {name: 'name', type: 'auto'}, 
      {name: 'image', type: 'auto'}, 
      {name: 'url', type: 'auto'}, 
      {name: 'description', type: 'auto'} 
     ] 
    } 
}); 

回答

0

嗯......

你沒有任何領域稱爲「贊助商」模型中的

config: { 
    sponsor: true, 
    dataMap: { 
     getSponsor: { 
      ***setItems: 'sponsor'*** //this supposed to map your component to the datafield 
     } 
    } 
}, 

嘗試改變加粗字體的字段名(setItems:「名稱')

如果我沒有弄錯,更新方法的參數命名有嚴格的規則: ***以「sponsor」爲例配置名稱

newSponsor,oldSponsor

所以對於贊助商的更新方法應該是:

updateSponsor: function(**newSponsor**, **oldSponsor**) { 
     if (oldSponsor) { 
      this.remove(oldSponsor); 
     } 

     if (newSponsor) { 
      this.add(newSponsor); 
     } 
    },