2013-03-27 79 views
2

进出口使用RPNiemeyer`s剑道敲除库我视图模型绑定我KendoUI网格。我想要做的是订阅网格的更改事件,以便我可以更新相应的viewmodel项目。剑道淘汰赛:绑定“中选择”视图模型属性与电网

我绑定对象的observableArray看起来像这样:

{ 
    Address: "Street name" 
    ClientNumber: 1337 
    NamePartner: "Client name" 
    Selected: false 
} 

现在,我想选择的属性被设置为true时,相应的行被选中(在KendoUI网格的变化情况) 。要做到这一点,我想我应该使用Knockoutjs自定义绑定处理程序。

我发现这个http://jsfiddle.net/D3rSk/155/,就是做那种相同的。唯一的问题是这个例子在我的控制台中给出了一些错误,它还绑定了一个单独的'selectedItem'可观察对象,而我想将它绑定到我的observableArray中的属性。

在此先感谢。

回答

5

它不是完全无缝做你想做什么,而是你可以这样做:

  • 添加的处理程序change事件
  • 使用网格的select方法获取选中行元素
  • 从行元素使用网格的dataItem方法
  • 这DataItem的是一个干净的对象获得数据项,所以采取其独特的密钥(ClientNumber你的情况),并用它来找到您observableA原始项目rray。

喜欢的东西:

<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绑定旁边。

+0

嗨,那里,感谢您的快速回复!我会调查你的答案。我认为这正是我正在寻找的地方。想想我会把这个逻辑转移到一个自定义绑定(如你所提到的)以使它更通用。 – 2013-03-27 14:28:26

+0

@ArjenvanPutten你有没有把它变成一个自定义绑定?如果是这样,你会介意发布它吗? – 2013-08-20 15:55:25