Extjs4 从ajax存储读取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

我有一个带有ajax代理和json阅读器的ExtJS存储:

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"});
}