2

剣道 UI グリッドがあります。グリッドには、複雑なオブジェクト データを含むデータ ソースがあります。たとえば、{"foo": {"bar" : 10}} です。column フィールドはオブジェクト グラフ (つまり foo.bar) をナビゲートできますが、aggregate フィールドはできないようです。

コードは次のとおりです。

var grid = $("#grid").kendoGrid({
   dataSource: {
       data: [
           {"foo": {"bar": 10}},
           {"foo": {"bar": 20}}
       ],

       aggregate: [
           {field: "foo.bar", aggregate: "sum"}
       ]  
   },
   columns: [
       {
           field: "foo.bar",
           footerTemplate: "Sum: #= sum # "
      }
  ]   
}).data("kendoGrid");

これがフィドルです: http://jsfiddle.net/e6shF/1/

Firebug は、kendo.all.min.js の 8 行目で「TypeError: data.foo is undefined」を報告します。

私は何か間違ったことをしていますか?これが剣道のバグである場合、これを回避する方法はありますか? オブジェクトを複雑に保つ必要があります。

4

2 に答える 2

4

剣道サポートからの「より良い」回答は次のとおりです。

発生している動作は、指定した「パス」が、集計の結果として作成されるマップでキーとして使用されるという事実によって引き起こされます。次のようなオブジェクトを生成します。

{ "foo.bar": { 合計: 30 } }

残念ながら、この構造はフッター テンプレートの生成ではサポートされておらず、正しく解決されません。このシナリオで考えられる回避策は、代わりに関数を使用することです。これを説明するために、サンプルを変更しました。

var grid = $("#grid").kendoGrid({
    dataSource: {
        data: [
            {"foo": {"bar": 10}},
            {"foo": {"bar": 20}}
        ],

        aggregate: [
            {field: "foo.bar", aggregate: "sum"}
        ]
    },
    columns: [
        {
            field: "foo.bar",
            footerTemplate: function(data) { return "Sum: " + data["foo.bar"].sum; }
        }
    ]   
}).data("kendoGrid");
于 2012-11-23T20:38:29.470 に答える
1

動的に生成された関数を評価するため、複雑なオブジェクトを集計に含めることはできません。それはfoo.barフィールドの名前 (1 つのフィールドのみ) だと思いますか?

その複雑なフィールドが本当に必要ですか?

サーバー(グリッドのデータを提供する)がその複合体を送信することは理解できるかもしれませんが、データソースのまたは関数を使用してfooいつでもフラット化できます。このようなもの:parsedata

var grid = $("#grid").kendoGrid({
    dataSource:{
        data:[
            {"foo":{"bar":10}},
            {"foo":{"bar":20}}
        ],
        aggregate:[
            {field:"foo_bar", aggregate:"sum"}
        ],
        schema:   {
            parse:function (data) {
                var res = [];
                $.each(data, function (idx, elem) {
                    res.push({ "foo_bar":elem.foo.bar })
                });
                return res;
            }
        }
    },
    columns:   [
        {
            field:         "foo_bar",
            footerTemplate:"Sum: #= sum # "
        }
    ]
}).data("kendoGrid");

受信foo.barしたものを変換foo_barして集計に使用する場所。

于 2012-11-15T00:44:20.323 に答える