2012-01-31 2 views
1

У меня вопрос о XML-списках с Sencha Touch.Sencha Touch XML List

я загрузить некоторые XML в Сенча Touch, и я хотел бы, чтобы отобразить их в виде списка:

Вот мой код: Сенча:

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> 

I может читать 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 @ Имя_атрибут»

Я надеюсь, что я помог вам .. искал некоторые часы для этого ..;)

1

Попробуйте изменить TabPanel на контейнер, это может помочь вам!

+0

не могли бы вы подробнее рассказать – Thomas

Смежные вопросы