让我首先陈述我的总体目标,然后我会问具体的问题。我的目标是找到一个网格控件以在我的 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 应用程序?即没有从头开始编写它?
谢谢