2013-03-27 124 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