【发布时间】: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 的镜像,并且填充了一些字段。在我的情况下,配置的阅读器是什么,它可以解析所提到的原始有效负载?我没有明确定义任何配置的阅读器。谢谢!