首先让我说明我的总体目标,然后我会问具体问题。我的目标是在我的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应用程序?即没有从头开始写它?
由于
答案 0 :(得分:0)
试试这个:
return this.manager.executeQuery(query)
.then(function (data) {
data.results.forEach(function (item) {
me.data.push(item);
});
})