2012-01-31 160 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