Extjs4 从ajax存储读取ExtJS消息
我有一个带有ajax代理和json阅读器的ExtJS存储:Extjs4 从ajax存储读取ExtJS消息,extjs4,Extjs4,我有一个带有ajax代理和json阅读器的ExtJS存储: Ext.create('Ext.data.Store'{ 代理:{ 键入:“ajax”, url:“…”, 读者:{ 键入:“json”, root:'数据', totalProperty:“totalCount”, messageProperty:'消息', successProperty:“成功” }, ... 这是我从服务器获得的信息: data: [...] message: "I want to read this stri
Ext.create('Ext.data.Store'{
代理:{
键入:“ajax”,
url:“…”,
读者:{
键入:“json”,
root:'数据',
totalProperty:“totalCount”,
messageProperty:'消息',
successProperty:“成功”
},
...
这是我从服务器获得的信息:
data: [...]
message: "I want to read this string after the store is loaded"
success: true
totalCount: x
现在,我想在加载存储时访问“消息”-我从哪里获得它?我查看了很多,但找不到一个可以连接的位置?代理中唯一的侦听器是exception,这对我没有帮助。使用存储事件:
Ext.create('Ext.data.Store'{
听众:{
“加载”:函数(存储、记录、成功、操作){
警报(operation.resultSet.message);
}
},
代理:{
// ...
更新
加载事件的文档似乎是错误的。正确的参数列表是(存储、记录、成功)
(无操作参数)),因此上述解决方案不起作用
但是,读者的属性有助于:
Ext.create('Ext.data.Store'{
听众:{
“加载”:函数(存储、记录、成功){
警报(store.getProxy().getReader().rawData.message);
}
},
代理:{
// ...
我的答案适用于ExtJs 4.1.x。我花了一些时间阅读代码,其中一种方法似乎是在store beforeload事件中提供回调,而不是处理load事件。回调被传递给operation对象,该对象将包含原始请求参数,如果成功,它将包含response对象和resultSet属性下的数据(已解析)。在其他情况下:
myStore.load({
callback : function(object, response, success) {
// on error response: success = false
if(!success) {
// i don't remember de correct path to get "message" or "responseText"
console.log(response.response.responseText);
} else {
...
}
});
Cya!我通过以下方式获得消息,尽管我在此处手动加载并且不使用事件:
谢谢,我当然尝试了加载侦听器,但是我不知道操作中的
resultSet
。但是无论如何,操作对象只包含存储侦听器方法(我在加载和加载之前就已经尝试过了)当我尝试访问resultSet时,它是未定义的。我使用ExtJS 4.0.2a。有什么想法吗?你的解决方案会很完美-如果它能在我的项目中工作:)你使用的是什么版本的ExtJS?@Marc,奇怪的是,操作参数似乎没有传递到加载事件处理程序中(但文档说应该传递).但是我找到了另一个解决方案。更新了我的答案。
var initData = Ext.create('My.data.SomeAjaxStore');
initData.load(function(records, operation, success) {
if (!success || operation.hasException()) {
// Here is your message from server
// In case of HTTP error you get:
// {
// status: 404,
// statusText: "Not Found"
// }
var error = operation.getError();
Ext.log({msg:[Ext.getClassName(me), ": Command failure: ", error].join(""), level:"error"});
}