1

让我首先陈述我的总体目标,然后我会问具体的问题。我的目标是找到一个网格控件以在我的 SPA(Durandal、Knockout、Breeze 等)中用于 CRUD 功能。对于一个与 Knockout/Breeze 配合得很好并为我提供所需功能的网格(Kendo、JQGrid、JQXGrid、IgniteUI 等),我从高处和低处寻找,但我似乎找不到。迄今为止最接近的是 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 应用程序?即没有从头开始编写它?

谢谢

4

1 回答 1

0

尝试这个:

return this.manager.executeQuery(query)
.then(function (data) {
    data.results.forEach(function (item) {
        me.data.push(item);
    });
})
于 2014-06-13T14:30:53.767 回答