将Knockout / Breeze实体绑定到IgniteUI igGrid

时间:2014-06-12 18:04:26

标签: knockout.js breeze ignite-ui iggrid

首先让我说明我的总体目标,然后我会问具体问题。我的目标是在我的SPA(Durandal,Knockout,Breeze等)中找到一个Grid控件用于CRUD功能。对于网格(Kendo,JQGrid,JQXGrid,IgniteUI等)来说,我看起来很高和很低,它与Knockout / Breeze配合使用并提供了我需要的功能,但我似乎无法找到它。到目前为止最接近的是IgniteUI的iqGrid。

我的具体问题:

我可以使用Breeze查询我的WebAPI,并获得良好的结果。我还可以手动使用可观察数组将结果绑定到网格,并让它们显示没有问题。我手动绑定的意思是,我必须设置每个属性并将其推送到数组。

return this.manager.executeQuery(query)
    .then(function (data) {
        data.results.forEach(function (item) {
            me.data.push({
                Id: item.Id,
                FirstName: item.FirstName,
                LastName: item.LastName,
                ProductName: item.ProductName,
                Quantity: item.Quantity,
                Price: item.Price,
                Created: item.Created,
                Enabled: item.Enabled
            });
        });
    })

'data'属性是一个Knockout Observable Array。

然而,这不是我理想的解决方案。如果我在表中添加一个字段,那么我只需要在代码中添加一个字段。我的理想解决方案是将Breeze实体地图自动映射到Knockout Observable Array并在网格中正确显示。

例如我尝试过这个,它适用于使用表格手动创建的简单网格:

return this.manager.executeQuery(query)
    .then(function (data) {
        me.data(data.results);
    })

但是这不会在igGrid中显示任何数据。

我也试过这个:

me.data = ko.toJS(data.results);

哪个也不起作用。

所以我的问题是,有没有办法实现这个目标?更重要的是,有没有更好的方法来使用现有工具创建CRUD应用程序?即没有从头开始写它?

由于

1 个答案:

答案 0 :(得分:0)

试试这个:

return this.manager.executeQuery(query)
.then(function (data) {
    data.results.forEach(function (item) {
        me.data.push(item);
    });
})