0

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 構造を持ち、パネルの値を取得する際に使用しました。これは正しい方法ですか?

4

2 に答える 2

2

Raw は、サーバーから送信された生の JSON データです。次に、構成されたリーダーがその生のペイロードを解析し、レコード オブジェクトを作成します。リーダーはストア プロキシで定義されます: docs.sencha.com/extjs/4.1.3/#!/api/Ext.data.reader.Reader

于 2013-09-11T17:43:30.357 に答える
0

「raw」は「バックエンド」から受け取ったものとして提供しますが、「record」はデータを提供しますが、モデルを介して「変換」します(「モデル」に適用された「式」または「フォーマット」があると仮定します)。返事が遅れて申し訳ありません!!

于 2018-12-02T08:09:55.660 に答える