extjs store.load 未填充,可能是根对象问题?

Posted

技术标签:

【中文标题】extjs store.load 未填充,可能是根对象问题?【英文标题】:extjs store.load not populating, possibly root object issue? 【发布时间】:2016-11-24 02:53:48 【问题描述】:

我在加载我的第一个 ExtJS 商店时遇到问题。

        var testStore = Ext.data.StoreManager.lookup('myUserStoreID');
        testStore.load(

        callback: function (records, operation, success) 

            testStore.each(function (record) 
                debugger;
                var task = record.data.description;
                console.log(task);
            );

            //debugger;
            //var x2 = operation._response;
            //var x3 = x2.responseText;
            //var x4 = Ext.decode(x3);
            ////var x3 = Ext.JSON.decode(operation);
            ////var x2 = Ext.decode(operation.response);

            //console.log(testStore);

        
    );

如果我深入到 operation._response.responseText,我可以在调试器中看到正确的数据,但记录是空白的。所以我知道这与我的代码有关。如果我使用 Ext.decode 它确实返回一个对象。返回数据自动填充我的商店,我做错了什么。

这是 fiddler 中对象的图片。

这是我尝试使用的模型...我知道它还没有所有字段。

Ext.define('ExtApplication1.model.UserModel', 
extend: 'ExtApplication1.model.Base',

requires: ['ExtApplication1.model.Base'],

fields: [
    /*
    The fields for this model. This is an Array of Ext.data.field.Field definition objects or simply the field name.
    If just a name is given, the field type defaults to auto.  For example:
    */
     name: 'UserID',     type: 'int' ,
     name: 'UserName',      type: 'string' ,
     name: 'password',    type: 'string' ,
     name: 'Email',   type: 'string' ,
     name: 'GroupID' 

],

proxy: 

    type: 'ajax',
    url: 'http://localhost:49537/api/user/gettargetuser/xxx/xxx',

    reader: 
        type: 'json',
        rootProperty: 'JSON'
    


这是我在 webapi 中的用户类

这是我创建商店的 MainModel.js

Ext.define('ExtApplication1.view.main.MainModel', 
extend: 'Ext.app.ViewModel',

alias: 'viewmodel.main',

data: 
    name: 'ExtApplication1',
    appName: xxx,
    appHeaderIcon: '<span class="fa fa-desktop fa-lg app-header-logo">',
    footer: 'Copyright - xxx- x
,

stores: 
        sessionListByInterest: 
            model: 'MainMenuListModel',
            autoLoad: false     //was true
        ,
        myUserStore: 
            model: 'UserModel',
            storeId: 'myUserStoreID',
            autoLoad: false
        ,

【问题讨论】:

您的 JSON 属性名称与您的 extjs 模型中的字段名称不匹配。例如,您在 JSON 中有“电子邮件”,但模型中有“电子邮件”作为字段名称。如果你解决了这个问题,它会起作用吗? @AmolKatdare 很奇怪,他们实际上匹配......至少电子邮件匹配。我为用户附上了 webapiClass 的图片...电子邮件确实显示为“电子邮件”。所以至少那个道具确实匹配。 这和我的 rootProperty 有关系吗? 另外,在我的 ExtJS 模型中,我是否必须具有在我的 webapi 中定义的导航属性...如您在上面看到的,我有公共虚拟组组,但我没有这在我的 EXTJS 模型中 请出示您的myUserStoreID商店的代码。如果它派生自JsonStore,则默认情况下,商店有自己的代理,它总是优先于模型中定义的代理。 【参考方案1】:

问题是商店希望 rootProperty 包含一个记录数组,而您只提供一条记录。

如果您只想加载不在数组中的单个记录,则必须使用静态 model.load() 函数。

或者您可以将 API 端点从 User JSON 更改为 List&lt;User&gt; JSON(或 IEnumerable&lt;User&gt;ICollection&lt;User&gt;User[]...),即使您打算只返回一个用户。 JSON 数组中有多少条记录无关紧要,但 ExtJS 存储需要该数组。

【讨论】:

让我检查一下...我怎么知道在 rootProperty 的代理中放置什么? 所以我改变了我的电话以返回一些项目,你是对的......它奏效了!感谢您指出这一点! 最后一件事,我在上面贴了我的sql图。在我的 webapi 中,我有所有这些表的类(10 个类)。在 ExtJS 中,我只有 1 个用户模型。现在,当我执行用户的 store.load 时,当我在 webbrower 调试器中查看记录/对象时,我可以深入了解所有 10 个类......所有这些都没有 ExtJS 中的类。我的印象是,如果我有 10 个 webapi 类,我就必须有 10 个 extjs 类。我在这里没有得到什么? 网络浏览器是javascript,JSON是javascript对象表示法。 WebAPI 序列化层次结构中的所有对象,因此反序列化的 JSON 对象包含所有对象。但这并不意味着 ExtJS 可以与所有这些一起工作。只要您不创建完整的 ExtJS 对象层次结构,ExtJS 模型的所有特性(加载到表单、跟踪更改等)都不适用于子模型。我不知道该怎么做,目前只在 ExtJS 中使用平面对象。 感谢@Alexander...猜猜这是有道理的。基本上,如果我想使用 extjs 的功能,我需要有 ExtJS 模型。感谢所有帮助!

以上是关于extjs store.load 未填充,可能是根对象问题?的主要内容,如果未能解决你的问题,请参考以下文章

使用 store.load 下载文件(Excel 文件)? (ExtJS 4.1)

store.load 后的 Extjs 网格选择有不正确的数据

重用或创建新的 Store - ExtJS 4

在form.submit之后的extjs store.load

带有 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL

ExtJS JsonStore 未填充