2012-01-31 159 views
1

Hei我有一個關於Sencha Touch XML列表的問題。Sencha Touch XML列表

我加載某些XML在煎茶觸摸,我想將其顯示爲一個列表:

這裏是我的代碼: 煎茶:

Ext.setup({ 
onReady: function() { 
Ext.regModel('navModel', { 
    fields: [ 
     {name:'id'}, 
     {name:'title'} 
     ] 
}); 

var navi = new Ext.data.Store({ 
    autoLoad:true, 
    model: 'navModel', 
    method: 'POST', 
    proxy: { 
    type: 'ajax', 
    url : 'navi.xml', 
    reader: { 
    type : 'xml', 
root: 'menu', 
record:'navigation' 
} 
} 
}); 
    var something = new Ext.List({ 
     store: 'navi', 
     title: 'asdfasdf', 
     emptyText: 'No data', 
     fulscreen: true, 
     itemTpl: '{id} - {title}' 
    }); 


     var rootPanel = new Ext.TabPanel({ 
      fullscreen:true, 
      items:[something] 
     }); 

    } 

}); 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <menu> 
    <navigation> 
    <id>1</id> 
    <title>Hello</title> 
    </navigation> 
    <navigation> 
    <id>2</id> 
    <title>Test</title> 
    </navigation> 
    </menu> 

我可以讀取XML但它不會顯示在列表中..出現了什麼問題?

THX答案

回答

0

你必須寫商店的名稱,沒有報價的跡象。

而對於所有誰得到了與映射問題...

你必須增加對煎茶,touch.js結束此變通辦法:

Ext.override(Ext.data.XmlReader, { 
    createAccessor: function() { 
     var selectValue = function(key, root, defaultValue){ 
      if(key == '#'){ 
       return root.tagName; 
      } 
      if(key.indexOf('@') != -1){ 
       var property = key.split('@')[ 1 ]; 
       key = key.split('@')[ 0 ]; 
      } 
      var val; 
      if(key.length){ 
       var node = Ext.DomQuery.selectNode(key, root); 
       if(node && node.firstChild){ 
        node = node.firstChild; 
       } 
      } 
      else{ 
       var node = root; 
      } 
      if(node){ 
       if(typeof(node.getAttribute) != 'undefined' && typeof(property) != 'undefined'){ 
        val = node.getAttribute(property); 
       } 
       else{ 
        val = node.nodeValue; 
       } 
      } 
      return Ext.isEmpty(val) ? defaultValue : val; 
     }; 

     return function(key) { 
      var fn; 

      if (key == this.totalProperty) { 
       fn = function(root, defaultValue) { 
        var value = selectValue(key, root, defaultValue); 
        return parseFloat(value); 
       }; 
      } 

      else if (key == this.successProperty) { 
       fn = function(root, defaultValue) { 
        var value = selectValue(key, root, true); 
        return (value !== false && value !== 'false'); 
       }; 
      } 

      else { 
       fn = function(root, defaultValue) { 
        return selectValue(key, root, defaultValue); 
       }; 
      } 

      return fn; 
     }; 
    }(), 
}); 

這樣你就可以訪問的屬性您XML與「@attributename」

,如果你想有機會獲得孩子的屬性你寫「childname @ AttributeName會」

我希望我幫助你..某些搜索小時; ..)

1

嘗試將TabPanel更改爲容器,這可能對您有幫助!

+0

可否請您詳細說明答案 – Thomas 2013-04-21 08:27:15