【问题标题】:ExtJs 4.2 :: difference between "record" and "raw" in GRIDExtJs 4.2 :: GRID 中“记录”和“原始”之间的区别
【发布时间】:2013-09-11 16:07:53
【问题描述】:

当我在 ExtJs 4.2 MVC 中使用关联时,我遇到了一个问题,我想出了一个解决方案。

Problem Stmt:我有一个填充了模型/商店的网格页面:问题。单击网格上的记录时,应该能够看到 cmets 这是另一个模型。每个 Issue 可以有多个 cmets。

示例 JSON:

   {
    "data": [
        {
            "id": 555,
            "status": "OPEN",
            "createDate": "04/29/2013",
            "comments": [
                {
                    "id": 1,
                    "commentDate": "19/02/2013",
                    "description": "Test"
                },
                {
                    "id": 2,
                    "commentDate": "29/01/2013",
                    "description": "Test 2"
                }
            ]
        }
    ],
    "total": 1,
    "success": true
}

控制器

Ext.define('app.IssuesC',
                {
                    extend : 'Ext.app.Controller',
                    stores : [ 'IssuesS','CommentsS'],
                    models : [ 'IssueM', 'CommentsM'],
                    views : [ 'issue.IssueDetailV',
                            'issue.IssueGridV',
                            'issue.IssueCommentsV'],
                    refs : [ {
                        ref : 'comments',
                        selector : 'issuecomments'//xtype for issue.IssueCommentsV
                    }, {
                        ref : 'issuedetail',
                        selector : 'issuedetailv'//xtype for issue.IssueDetailV
                    }, {
                        ref : 'issuegrid',
                        selector : 'issuegrid'//xtype for issue.IssueGridV
                    } ],
                    onLaunch : function(app) {
                        this.control({
                                    'issuegrid' : {
                                        itemdblclick : this.onGridItemDblClick,
                                        select : this.onSelectIssueShowComments
                                    }
                                });
                    },

                    onGridItemDblClick : function(view, record, item, index, e) {
                        var IssueDetailV = Ext.widget('issuedetailv');
                            IssueDetailV.down('form').getForm().loadRecord(record);

                    },

                    onSelectIssueShowComments : function(selection,record, index, eOpts) {
                        this.getComments().setRecord(record.raw);

                    }
                });

模型和关联设置

Issue --> associations --> Comment

IssueM:

hasMany : {model:'CommetM',
name : 'commentsassociation'} 

CommentM: 

belongsTo : {model : 'IssueM'}

在任何地方都没有问题。景色非常好。只需单击一下控制器部分,我就可以在面板中查看 cmets 列表(位于主网格下方)。我在面板中使用了 XTemplate 的 TPL 属性,它运行良好。这个属性“原始”是什么?当我在萤火虫中评估“记录”时,它会显示“原始”“数据”和许多对象。数据部分映射名称参数并填充值。原始部分具有相同的 JSON 结构,我已使用它来检索面板的值。这是正确的方法吗?

【问题讨论】:

  • Raw 只是从服务器向下发送的原始 JSON 数据。然后配置的阅读器解析原始有效负载并创建您的记录对象。
  • @dbrin ,所以,raw 只是 JSOn 的原始格式,记录中的 data 参数与 ExtJs 的 Model 部分绑定。我从 firebug 的 data 属性中看到了一个值列表,它是 Model 的镜像,并且填充了一些字段。在我的情况下,配置的阅读器是什么,它可以解析所提到的原始有效负载?我没有明确定义任何配置的阅读器。谢谢!

标签: extjs extjs-mvc extjs4.2


【解决方案1】:

Raw 只是从服务器向下发送的原始 JSON 数据。然后,配置的阅读器解析该原始有效负载并创建您的记录对象。 读者在 store 代理中定义:docs.sencha.com/extjs/4.1.3/#!/api/Ext.data.reader.Reader

【讨论】:

  • 这样做是否正确。 “record.raw”将其作为参数传递给处理程序?
  • 对于顶级记录,没有。除非出现错误,否则将自动解析记录。您可以在阅读器上附加错误侦听器:docs.sencha.com/extjs/4.1.3/#!/api/…
  • 对于嵌套数据集,请阅读我上面链接的 API 文档,它讨论了这个主题。
  • 我查看了您提供的链接。他们很有帮助。谢谢你。我采用了不同的方法。我使用了 var comment_assoc=record.getData(true) 带来了关联相关数据。现在,当使用 getForm().loadRecord(comment_assoc) 加载表单时会引发错误,因为 loadRecord() 是一个以 Record 作为参数的基本表单方法。对此有何建议?顺便说一句,表单是一个小部件,它在 Grid 的项目双击事件上打开。
  • 您可以在表单上使用 setValues。
【解决方案2】:

“原始”给出从“后端”接收的数据,但“记录”给出数据但通过模型“转换”(假设您在“模型”中应用了一些“公式”或“格式”)。抱歉回复晚了!!

【讨论】:

  • 顺便说一句;即使我们在 Ext 6 中,但我仍然爱上 Ext 4。
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 2014-03-02
  • 2013-09-26
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多