我正在使用RPNiemeyer的kendo-knockout库将我的viewmodel与我的KendoUI网格绑定。我想要做的是订阅网格的更改事件,以便我可以更新相应的viewmodel项。
我绑定了一个observableArray,其对象是这样的:
{
Address: "Street name"
ClientNumber: 1337
NamePartner: "Client name"
Selected: false
}
现在,我希望在选择相应的行(KendoUI网格的更改事件)时将Selected属性设置为true。为此,我想我应该使用Knockoutjs自定义绑定处理程序。
我发现这个http://jsfiddle.net/D3rSk/155/,就是这样做了。唯一的问题是这个例子在我的控制台中给出了一些错误,它也绑定了一个单独的'selectedItem'可观察对象,而我想将它绑定到我的observableArray中的属性。
提前致谢。
答案 0 :(得分:5)
做你想做的事并不是完全无缝的,但你可以这样做:
change
事件select
方法dataItem
方法类似的东西:
<div id="grid" data-bind="kendoGrid: { data: items, sortable: true, selectable: true, change: updateSelected, columns: ['Address', 'ClientNumber', 'NamePartner'], widget: grid }"></div>
在您的视图模型上使用updateSelected
方法,如:
updateSelected: function() {
var grid = viewModel.grid(),
row = grid.select(),
clientNumber = grid.dataItem(row).ClientNumber,
actualItem = ko.utils.arrayFirst(viewModel.items(), function(item) {
return item.ClientNumber === clientNumber;
});
if (actualItem) {
actualItem.Selected = true;
if (viewModel.previouslySelected) {
viewModel.previouslySelected.Selected = false;
}
viewModel.previouslySelected = actualItem;
}
return true;
}
示例:http://jsfiddle.net/rniemeyer/7MXfj/
您可以考虑尝试将此逻辑移动到将添加到kendoGrid
绑定旁边的自定义绑定中。