ExtJs 4.2 MVC でアソシエーションをいじっていたとき、解決策を思いついた問題に遭遇しました。
問題点: Model/Store : Issueが入力されたグリッド ページがあります。グリッド上のレコードをクリックすると、別のモデルであるコメントが表示されるはずです。各号には多くのコメントを含めることができます。
サンプル 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'}
どこにも問題はありません。ビューは完全に問題ありません。ワンクリックのコントローラー部分で、コメントのリストをパネル(メイングリッドの下に配置)に表示できます。パネルで XTemplate の TPL プロパティを使用しましたが、問題なく動作しました。このプロパティ「生」とは何ですか? firebug で「レコード」を評価すると、「生の」「データ」と多くのオブジェクトが表示されます。データ部分は name パラメーターをマップし、値を入力します。生の部分は同じ JSON 構造を持ち、パネルの値を取得する際に使用しました。これは正しい方法ですか?