ExtJS 4 存储回调函数不获取记录

Posted

技术标签:

【中文标题】ExtJS 4 存储回调函数不获取记录【英文标题】:ExtJS 4 store callback function don't get record 【发布时间】:2018-12-19 03:54:23 【问题描述】:

存储回调如下:

var store = new Ext.create("Ext.data.TreeStore", 
    model: "DeptModel",
    proxy: 
        type: 'ajax',
        url: 'jsonWebCommMenuOp_getMenus?PID=0',
        reader: 'json'
    ,
    autoload: true
);

store.load(
    callback: function(records, options, success) 
        var jsonStr = Ext.JSON.encode(records[0].raw);
        var jsonObj = Ext.JSON.decode(jsonStr);
        alert(jsonStr);
    
);

服务器响应如下:


    "success": true,
    "msg": "123"

我测试回调参数success,它等于true,但records是空白[]。

这是什么原因?请帮帮我。

【问题讨论】:

你的DeptModel在哪里? 【参考方案1】:

在您的情况下,您必须考虑以下事项:

您的服务器响应究竟是什么。如果是"success":true, "msg":"123",那你就真的错过数据了。 您必须在reader config 中设置包含数据项的属性名称。在 ExtJS 4 中,这可以使用 root 来完成,在 EXTJS 5,6 中使用 rootProperty。 如果您通过代码加载存储数据,请将autoLoad 设置为false

ExtJS 4.2

reader: 
    type: 'json',
    root: 'data'
   

ExtJS 5 和 ExtJS 6

reader: 
    type: 'json',
    rootProperty: 'data'
   

注意事项:

我已经用 EXTJS 4.2 复制了您的测试用例,这些是导致这种行为的原因:

JSON 响应不包含数据

root (rootProperty) 配置未设置。

JSON 响应包含数据,但包含该数据的属性名称与 reader 配置中的名称不同。

工作示例:

服务器响应:


    "success": true,
    "data": [
        "text": "Some words",
        "text": "Some words",
        "text":"Some words"
    ]

html

Ext.define('DeptModel', 
    extend: 'Ext.data.Model',
    fields: [
        name: 'text', type: 'string'
    ]
);
Ext.onReady(function()
    var store = new Ext.create("Ext.data.TreeStore", 
        model: "DeptModel",
        proxy: 
            type: 'ajax',
            //url: 'jsonWebCommMenuOp_getMenus?PID=0',
            // I've used simple php script to populate JSON response:
            url: 'store-load.php',
            reader: 
                type: 'json',
                root: 'data'
               
        ,
        autoLoad: false
    );

    store.load(
    
        callback: function(records, options, success)
        
            //var jsonStr = Ext.JSON.encode(records[0].raw);
            //var jsonObj = Ext.JSON.decode(jsonStr);
            //alert(jsonStr);
            console.log(records);
        
    ); 

);

【讨论】:

【参考方案2】:

您需要在以下几点重新检查您的代码:-

    autoLoad 而不是 autoloadTreeStore 你应该提到root:

看看这个working fiddle

注意:我使用data.json来请求。

希望这将帮助/指导您正确。

【讨论】:

以上是关于ExtJS 4 存储回调函数不获取记录的主要内容,如果未能解决你的问题,请参考以下文章

如何添加同步回调以存储在 ExtJS 中

ExtJs 4 回调

Extjs 回调函数到控制器

如何在 ExtJs 中的回调函数后更改隐藏值

extjs中组件监听器里面的回调函数说明

Ext JS 4 存储加载回调