sencha touch accordion list不加载数据

时间:2013-11-25 03:40:50

标签: sencha-touch-2 accordion

我无法弄清楚为什么我的数据不会从这里加载到我的AccordionList元素: https://github.com/kawanoshinobu/Ext.ux.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);
            } 
        }
    }
});

这里的项目出现在手风琴中。我无法弄清楚为什么第二个例子有效,而第一个例子没有。在为Accordion调用商店代理时,我应该做些什么特别的事情吗?

UPDATE :我设法获得手风琴列表来显示数据,但是当我更改商店的网址并重新加载时,商店会重新加载,但手风琴列表不会更新。手风琴列表继续显示从第一个URL接收的数据,而不是重新加载修改后的URL。

由于

2 个答案:

答案 0 :(得分:1)

我想我想出来了。对于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();

基本上,手动删除所有项目,设置新网址,在列表中设置商店,然后加载列表。

答案 1 :(得分:0)

我认为您的代理配置存在问题。首先,删除defaultRootProperty配置(超出proxy配置),然后尝试:

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