繁体   English   中英

Sencha Touch XML列表

[英]Sencha Touch XML List

嗨,我有一个关于Sencha Touch的XML列表的问题。

我在Sencha Touch中加载了一些XML,我想将它们显示为列表:

这是我的代码: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,但无法在列表中显示它。

感谢答案

尝试将TabPanel更改为Container,这可能会对您有所帮助!

您必须写出不带引号的商店名称。

对于所有在地图方面遇到问题的人...

您必须在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;
        };
    }(),
});

因此您可以使用“ @attributename”访问xml的属性

如果您想访问子属性,请输入“ childname @ attributename”

我希望我能帮助您..为此花了几个小时..;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM