队,
我有一个jsonstore来加载我的列表。我正在使用内联数据加载商店而没有任何代理配置。我想调用我商店的加载事件。请告诉我怎么做。
以下是我的商店代码:
Store = new Ext.data.JsonStore({ model:'SettingModel',
getGroupString:function(){
return 'Set Duration';
},
autoLoad:false,
data: [
{name: '5 mins', value: '5'},
{name: '15 mins', value: '15'},
{name: '25 mins', value: '25'},
{name: '45 mins', value: '45'}
],
listeners : {
'load': function(){
Ext.Msg.alert('App',"load");
}
}});
Store.load();
使用上面的代码我收到以下错误消息:“未捕获的错误:您正在使用ServerProxy但没有提供它的URL”
如果我删除“Store.load();”行,我没有得到错误,列表填充数据。但是不会触发load事件。
请帮助我在这种情况下如何使加载事件发生。
先谢谢
答案 0 :(得分:2)
数据内嵌时不会调用加载事件。此外,只有在使用AJAX请求访问数据时才应调用加载方法(这就是调用.load()方法时需要代理的URL的原因)。
尝试使用 loadData方法加载内联数据,而不是在对象构造函数和 datachanged事件中传递它,如果您想在每次调用loadData时进行侦听。
答案 1 :(得分:2)
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'items'
}
},
直接来自商店的Ext文档:http://dev.sencha.com/deploy/touch/docs/
Ext.regModel('User', {
fields: [
{name: 'firstName', type: 'string'},
{name: 'lastName', type: 'string'},
{name: 'age', type: 'int'},
{name: 'eyeColor', type: 'string'}
]
});
哦,看,他们在本地商店没有内存代理!
new Ext.data.Store({
model: 'User',
data : [
{firstName: 'Ed', lastName: 'Spencer'},
{firstName: 'Tommy', lastName: 'Maintz'},
{firstName: 'Aaron', lastName: 'Conran'},
{firstName: 'Jamie', lastName: 'Avins'}
]
});
作为一个有趣的奖励,JsonStore甚至不在触摸文档中。
http://jsfiddle.net/6WV3m/3/是extjs 4.0代码,但它可以在我的本地触摸上工作。
答案 2 :(得分:1)
首先,您需要确保正在使用您的商店。你有autoLoad:false,所以它不会自己加载。您绑定它的组件必须加载它,或者您必须调用它的加载方法。此外,您应该检查异常状态。
通常你想要采用以下格式:
listeners : {
load : {
fn : function(){
Ext.Msg.alert('App',"load");
},
scope : this
},
exception : {
fn : function( err ){
Ext.Msg.alert('App',"Oh Crap!"+err);
},
scope : this
}
}
这样你可以控制功能和范围,这是一个经常出现的问题,
答案 3 :(得分:1)
pablodcar的回答应该真的适合你。您可以使用空数据数组实例化商店,然后使用要加载的数据数组调用loadData()
方法。如果您使用 storeId 启动商店,然后使用Ext.data.StoreManager.lookup(storeId)
进行查找,则可以从任何地方调用此方法。
要在商店数据发生变化时收到通知,您可以收听datachanged
事件。