ExtJS 6在store sync的回调中访问messageProperty

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExtJS 6在store sync的回调中访问messageProperty相关的知识,希望对你有一定的参考价值。

我想在同步ExtJS网格后在UI中显示来自我的服务器的消息。以下是该如何发布的摘录:

this.store.sync({
        callback: function (records, operation, success) {
          // messageProperty accessing code
        },
        success: function (batch, options) {
          // messageProperty accessing code
        },
        failure: function (batch, options) {
        }
    });

这是商店定义的一部分:

 proxy: {
    headers: { 'Accept': 'application/json' },
    limitParam: undefined,
    pageParam: undefined,
    startParam: undefined,
    paramsAsJson: false,
    type: 'ajax',        
    // ...
    reader: {
        type: 'json',
        rootProperty: 'Data',
        messageProperty: 'Message'
    },
    // ...
},

这是从服务器返回的一些数据(省略了数组中的数据:

{
 "Data":[
 ],
 "Message":"Success!"
}

应用程序似乎没有读取数据属性的问题(即我的网格正常工作),但我无法在sync方法的回调或成功事件中访问message属性。这是错误消息:

Uncaught TypeError: Cannot read property 'Message' of undefined(…)

createAccessor: (function () {
    var re = /[[.]/;
    return function (expr) {
        var me = this,
            simple = me.getUseSimpleAccessors(),
            operatorIndex, result, current, parts, part, inExpr, isDot, isLeft, isRight, special, c, i, bracketed, len;
        if (!(expr || expr === 0)) {
            return;
        }
        if (typeof expr === 'function') {
            return expr;
        }
        if (!simple) {
            operatorIndex = String(expr).search(re);
        }
        if (simple === true || operatorIndex < 0) {
            result = function (raw) {
                return raw[expr];  <-------- This is where it goes wrong at some point
            };
        } 

如果我通过此代码调试,在某些时候原始变量会丢失其值,这会给出预期的未定义错误消息。我的问题是我如何能够在Ext 6商店的回调函数或成功函数中检索message属性?

答案

在ExtJS 6中,Sencha已将keepRawData的默认值更改为false。如果将其更改回true,则一切都应该按预期再次运行。 Sencha文档告诉我们存在内存泄漏的可能性,但我还没有遇到过这样的问题。

另一答案

您可能不必更改默认的keepRawData值在ExtJS 6中,您还可以使用以下命令从操作参数访问messageProperty:

operation.error;

要么

operation.getError();

唯一的问题是如果success参数为true,则不设置error属性。在这种情况下,我猜他们希望你使用记录参数,因为这是服务器的数据无论如何。

以上是关于ExtJS 6在store sync的回调中访问messageProperty的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS.data.store.load 回调之外的空值

在 Ext JS 4 中通过 store.sync() 更新记录后,记录翻倍

在 ExtJS 中从 Store 访问数据?

ExtJS 4:存储数据未填充存储加载回调函数中的数据

Extjs4.1,存储同步后检索响应消息

ExtJS Ajax vs Extjs Store 用于来自服务器的单行