如何使用Sencha / Phonegap将XML加载到列表中?

时间:2011-10-10 15:02:28

标签: javascript xml cordova xml-parsing sencha-touch

我正在尝试使用sencha touch和phonegap设置原生样式的应用程序。我正在尝试将外部XML Feed中的数据导入到模型中。

在我的模型(Event.js)中,我有:

Ext.regModel('Event', {
    fields: [
        {name: 'title', type: 'string'}
    ]
});

在我的商店(eventsstore.js)

ToolbarDemo.eventstore = new Ext.data.Store({
    model: 'Event',
    sorters: 'title',

    getGroupString : function(record) {
        return record.get('title')[0];
    },

    proxy: {
        type: 'ajax',
        url: 'http://the-url-to-the-file.xml',
        reader: {
            type: 'xml',
            root: 'events',
            record: 'event'
        }
    },
    autoLoad: true
});

在视图(尝试列表)

ToolbarDemo.views.Eventscard = Ext.extend(Ext.List, {
    title: "Events",
    iconCls: "search",

    store: ToolbarDemo.eventstore,

    itemTpl: '{title}',
    grouped: true,
    indexBar: true,


    cardSwitchAnimation: 'slide'

});

Ext.reg('eventscard', ToolbarDemo.views.Eventscard);

尝试作为面板

ToolbarDemo.views.Eventscard = Ext.extend(Ext.Panel, {
    title: "Events",
    iconCls: "search",

    dockedItems: [{
        xtype: 'toolbar',
        title: 'Events'
    }],

    layout: 'fit',
    items: [{
        xtype: 'list',
        store: ToolbarDemo.eventstore,
        itemTpl: '{title}',
        grouped: true
    }],
    //This was an experiment, safe to leave out?
    initComponent: function() {
        //ToolbarDemo.eventstore.load();
        ToolbarDemo.views.Eventscard.superclass.initComponent.apply(this, arguments);
    }
});

Ext.reg('eventscard', ToolbarDemo.views.Eventscard);

现在,当我导航到该卡片视图时,会显示加载覆盖/微调器,但是就其而言,项目列表不会出现。对我做错了什么想法?

2 个答案:

答案 0 :(得分:1)

我对此并不熟悉,我这样用来显示列表..试试这个

ToolbarDemo.eventstore.load();

var itemTpl = new Ext.XTemplate('<div id='title'>{title}</div>');

this.eventStoreList = new Ext.List({
            id: 'eventStoreList',
            store: ToolbarDemo.eventstore,
            itemTpl: itemTpl,
            height: 370,            
            indexBar: false
        });

this.eventStoreListContainer =  new Ext.Container( {
            id : 'eventStoreListContainer',
            items : [this.eventStoreList]
        });


        this.items = [this.eventStoreListContainer];

 ToolbarDemo.views.Eventscard.superclass.initComponent.apply(this);

答案 1 :(得分:0)

嗯,我搞定了!

我在商店代码的末尾添加了ToolbarDemo.eventstore.read();,将XML文件保存在根目录'www'文件夹中,然后使用list方法正常工作!

有没有人知道为什么这个(调用远程XML)会出问题?

编辑:结果证明它在浏览器中运行良好,但不适用于iPhone模拟器。所以现在我已经将它设置回远程URL并将URL添加到PhoneGap白名单中并且效果很好:)