0

我正在使用我需要用 JsonRest 填充的道场网格。

这是代码:

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"}

- ETC

我似乎不知道如何实现的目标是在网格的标题中放入字段 strategyname 的值,并在行中放入字段 strategyid 的值,而不是我只在标题中输入一个像这样的列:

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

我想拥有

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

为此,我认为我可以通过数据收集循环查询 JsonRest,以形成我需要的结构并将其传递给网格。
有人可以帮我吗?

4

1 回答 1

1

看起来您使用的是 dojo 1.7+,因此您可以首先摆脱对 dojo 全局(dojo.connect 等)的所有调用,并将其替换为 AMD 等价物。

对于您要实现的目标,您必须分两步执行此操作:

首先,调用您的商店以获取数据,并使用以下内容创建您的布局:

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:我用小提琴中的 MemoryStore“memStore”替换了你的 JsonRestStore ......

于 2013-08-09T14:29:08.020 回答