从ajax商店读取ExtJS消息

时间:2011-11-02 08:06:04

标签: extjs4

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

Ext.create('Ext.data.Store', {
    proxy: {
        type: 'ajax',
        url: '...',
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'totalCount',
            messageProperty: 'message',
            successProperty: 'success'
        },
    ...

这是我从服务器获得的:

data: [...]
message: "I want to read this string after the store is loaded"
success: true
totalCount: x

现在我想在加载商店时访问'消息' - 我从哪里获得它?我看了很多,但我找不到一个可以挂钩的地方?代理中唯一的监听器是异常,这对我没有帮助。

4 个答案:

答案 0 :(得分:5)

使用商店load活动:

Ext.create('Ext.data.Store', {
  listeners: {
    'load': function(store, records, successful, operation) {
      alert(operation.resultSet.message);
    }
  },
  proxy: {
  // ...

<强>更新

看来加载事件的文档是错误的。正确的参数列表是(store, records, successful)无操作参数)。因此,上述解决方案无效。

但是有读者的rawData属性可以提供帮助:

Ext.create('Ext.data.Store', {
  listeners: {
    'load': function(store, records, successful) {
      alert(store.getProxy().getReader().rawData.message);
    }
  },
  proxy: {
  // ...

答案 1 :(得分:0)

我的回答适用于ExtJs 4.1.x.我花了一些时间阅读代码,似乎有一种方法是在商店beforeload事件中提供回调,而不是处理load事件。回调传递的操作对象将包含原始请求参数,如果成功,它将包含响应对象和resultSet属性下的数据(已解析)。

答案 2 :(得分:0)

在其他情况下:

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 {
         ... 
    }
});

氰!

答案 3 :(得分:0)

虽然我手动加载并且不在此处使用事件,但我以下列方式收到消息:

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