我无法弄清楚为什么我的数据不会从这里加载到我的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。
由于
答案 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'
}
},