Sencha Touch XML список - PullRequest
       12

Sencha Touch XML список

1 голос
/ 31 января 2012

Привет, у меня есть вопрос о списках XML с Sencha Touch.

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

Вот мой код: Sencha:

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, но он не отображается в списке .. что не так ??

Спасибо заответы

Ответы [ 2 ]

1 голос
/ 21 апреля 2013

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

0 голосов
/ 01 февраля 2012

Вы должны написать название магазина без знака кавычки.

И для всех, у кого проблемы с отображением ...

Вы должны добавить этот обходной путь в конце sencha-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 с помощью '@ attributetename'

и если вы хотите иметь доступ к дочерним атрибутам, вы пишете 'childname @ attributetename'

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

...