0

JsonRest を設定する必要がある Dojo グリッドを使用しています。

これはコードです:

require 
    (
        [ 'dojo/_base/lang', 'dojox/grid/DataGrid', 'dojo/data/ObjectStore', 'dojo/store/JsonRest', 'dojo/dom', 'dojo/domReady!' ],
        function ( lang, DataGrid, ObjectStore, JsonRest, dom )
        {

            jsonr = new JsonRest
            (
                { target: 'carrierSlideListStrategiesByGroupOrCarrierAction.do?output=<%=Constants.OUTPUT_JSON%>' }

            );

            var layout =
            [
                [
                    { 'name': 'strategyname', 'field': 'strategyid', 'width': '23%', 'cellStyles': 'white-space: nowrap;', 'headerStyles': 'white-space: normal; word-wrap: normal; text-align: center;' }              
                ]
            ];

            grid00 = new DataGrid 
            (
                {
                    store: store00 = new ObjectStore ( { objectStore: jsonr } ),
                    structure: layout,
                    rowSelector: '20px'
                }
            );

            grid00.placeAt ( 'grid00' );
            grid00.startup ();
            dojo.connect 
            (
                grid00, 
                "_onFetchComplete",
                function ()
                {
                    $ ( '#msg_home' ).empty ();
                    $ ( '#msg_home' ).html ( '<table><tr><td><bean:message key="bodycarrierslidebygrouporcarrier.query.businessnumbers.done00"/>' + '<b>' + grid00.rowCount + '</b>' + '<bean:message key="bodycarrierslidebygrouporcarrier.query.done01"/></td></tr></table>' );
                }
            );
        }
    );

私が取得しているデータ コレクションは次のとおりです。

[{"strategyid":"1","strategyname":"AR","strategycompliantflag":"GROUP_STRATEGY_NA"},
{"strategyid":"0","strategyname":"Facilities","strategycompliantflag":"GROUP_STRATEGY_NA"},
{"strategyid":"1","strategyname":"Panel","strategycompliantflag":"GROUP_STRATEGY_NA"},
{"strategyid":"0","strategyname":"Agreem.","strategycompliantflag":"GROUP_STRATEGY_NA"}

- 等

達成方法がわからないように見える私の目的は、グリッドのヘッダーにフィールド strategyname の値を入れ、行にフィールド strategyid の値を入れることです。代わりに、ヘッダーに 1 つだけ入っています。次のような列:

-------------
strategyname
-------------
1  
0  
1  

そして、私はしたいと思います

------ ------------- -------   ----
AR      Facilities     Panel    Agreem
------  ------------ --------  --------
1         0             1       0

そのためには、データ コレクションのループで JsonRest をクエリして、必要な構造を形成し、それをグリッドに渡すことができると考えました。
誰か助けてくれませんか?

4

1 に答える 1

1

Dojo 1.7+ を使用しているように見えるので、dojo グローバル (dojo.connect など) へのすべての呼び出しを取り除くことから始めて、AMD の同等のものに置き換えることができます。

あなたが達成しようとしていることのために、あなたは2つのステップでこれをしなければなりません:

まず、ストアを呼び出してデータを取得し、次のようなレイアウトを作成します。

var layout = array.map(yourJsonStore.query(), function (item) {
    return {
        name: item.strategyname,
        field: "strategycomplyantflag" + "_" + item.strategyname
     }
});

次に、データ項目をレイアウトで宣言されたフィールド名と一致するように成形し、memoryStore に配置します。

例 :

var transformedMemStore = new Memory({
    data: array.map(yourJsonStore.query(), function (item) {
        var obj = {};
        obj["id"] = item.strategyid;
        obj["strategycomplyantflag_" + item.strategyname] = item.strategycompliantflag;
        return obj;
     })
 });

最後に、変換されたストアを objectStore プロパティとして使用して objectStore を作成し、それをグリッドに割り当てます。完全な例はこちら: http://jsfiddle.net/psoares/9MLT5/

PS:フィドルでJsonRestStoreをMemoryStore「memStore」に置き換えました...

于 2013-08-09T14:29:08.020 に答える