Sencha touch 2 sencha touch手风琴列表未加载数据

Sencha touch 2 sencha touch手风琴列表未加载数据,sencha-touch-2,accordion,Sencha Touch 2,Accordion,我不明白为什么我的数据不能从这里加载到我的AccordionList元素: 我在一个面板中创建它,如下所示: { xtype: 'accordionlist', store: Ext.create('Rks.store.Bcks'), flex: 1 }, 它调用定义如下的存储: Ext.define('Rks.store.Bcks', { extend: 'Ext.data.TreeStore', requires: ['Rks.model.Bck'

我不明白为什么我的数据不能从这里加载到我的AccordionList元素:

我在一个面板中创建它,如下所示:

{
    xtype: 'accordionlist',
    store: Ext.create('Rks.store.Bcks'),
    flex: 1
},
它调用定义如下的存储:

Ext.define('Rks.store.Bcks', {
    extend: 'Ext.data.TreeStore',
    requires: ['Rks.model.Bck'],
    config: {
        itemId: 'bks',
        model: 'Rks.model.Bck',
        defaultRootProperty: 'items',
        proxy: {
            type: 'ajax',
            url: 'path/to/ajax',
        },
        autoLoad: false,
        listeners:{
            load: function( me, records, successful, operation, eOpts ){
                console.log("data loaded", records);
            } 
        }
     }
});
当我调用包含手风琴的视图时,控制台会记录看起来不错的对象:

items: [{bck_id:3, author_id:1, title:test, items:[{c_id:2, bck_id:3, title:choice1, leaf:true}]}]
但是什么也没有出现。面板为空,未显示任何手风琴项目

但是,当我用内联JSON替换代理时,一切看起来都很好:

Ext.define('Rks.store.Bcks', {
    extend: 'Ext.data.TreeStore',
    requires: ['Rks.model.Bck'],
    config: {
        itemId: 'bks',
        model: 'Rks.model.Bck',
        defaultRootProperty: 'items',
        root: {
            items: [
                    { bck_id: 1, author_id: 1, title: 'bck1', items: [ {c_id: 1, bck_id: 1, title: 'choice1', leaf: true} ] }
                ]
        }
        autoLoad: false,
        listeners:{
            load: function( me, records, successful, operation, eOpts ){
                 console.log("data loaded", records);
            } 
        }
    }
});
这里的项目显示在手风琴。我不明白为什么第二个例子有效而第一个不有效。当我打电话给商店代理购买手风琴时,有什么特别的事情要做吗

更新:我已成功获取手风琴列表以显示数据,但当我更改存储的url并重新加载它时,存储会重新加载,但手风琴列表不会更新。accordion列表继续显示它从第一个URL接收的数据,而不是从使用修改的URL重新加载的数据


谢谢

我认为您的代理配置有问题。首先,删除
defaultRootProperty
config(它不在
proxy
config中),然后尝试以下操作:

    proxy: {
        type: 'ajax',
        url: (your ajax url),
        reader: {
            type: 'json',
            rootProperty: 'items'
        }
    },

我想我明白了。对于accordionlist组件,您需要这样做:

                var accordionlist = Ext.ComponentQuery.query('rdb #rdb1')[0];
                var brickstore = Ext.getStore('bcs');
                bcs.removeAll();
                bcs.getProxy().setUrl('newurl');
                accordionlist.setStore(bcs);
                accordionlist.load();

基本上,手动删除所有项目,设置新的url,在列表上设置存储,然后加载列表。

我应该提到-我已经尝试过了,还有很多其他的变体。我只是再试了一次,它产生了相同的结果:我通过连线得到了一个结果对象:{“items”:[{“bck_id”:3,“author_id”:1,“title”:“test”,“items”:[{“c_id”:2,“bck_id”:3,“title”:“choice1”,“leaf”:true}]}]}}}}},但手风琴列表中没有显示任何内容。对此不确定,但你能尝试一下吗{xtype:'accordiolist',store Ext getStore('storeid'),flex:1},Uncaught TypeError:Object#没有方法'getStore'我也使用这种方式将新数据加载到我的手风琴中。当列表中有更多记录时,你是否感觉到任何缓慢?当我尝试使用store.removall()清除数据时,我的列表会花费太多时间来清除记录,这是一个大问题,它可以处理少量记录。当列表增加到40或60条记录时,它确实会挂起应用程序。请回复您的回复experience@Dibish-事实上,我一次只使用5-10个元素,所以没有看到任何缓慢,但这可能是由于列表的长度。感谢您的回复,这可能是问题所在。我有大约200个元素o列表中有400条记录。使用分页显示所有记录。因此,我必须找到其他方法来解决此问题。。