3

數據屬性的綁定我有類似的東西:雙向與淘汰賽

HTML:

<label id="CustomerName" data-bind="text: name, attr: {'data-value': name}"></label> 

腳本:

var viewModel = { 
    name : ko.observable("Original Name"); 
} 

ko.applyBindings(viewModel); 

我希望能夠改變數據屬性以編程方式與jQuery的幫助。

$("#CustomerName").data("value", "NewName"); 

改變數據屬性的值之後,我沒有看到我的變化早在視圖模型的鏈接屬性。

Knockout的正常行爲是不同步綁定到數據屬性的viewmodel屬性?

如果數據屬性不是雙向的,那麼最好的方法是什麼?隱藏字段??你明白我不希望輸入字段像文本框?是啊!啊,好吧,... :)

謝謝。

回答

0

如果你改變你的淘汰賽視圖模型之外jQuery中的價值,你必須做到以下幾點:

$('#CustomerName').val('NewName'); // Works the same way as your example 
$('#CustomerName').change(); 

由於淘汰賽贊同其綁定的變化()事件,你必須觸發change()事件,以便Knockout知道它已更改。您不需要「data-」屬性,只需將文本綁定到視圖模型上的可觀察對象,Knockout即可處理其餘部分。

0

你也可以得到的數據與元素:

ko.dataFor($("#CustomerName")[0])("NewName") 

,並設置這樣的。

我建議你爲此做一個bindingHandler,它保持數據屬性和值的同步。您可以掛鉤到屬性的更改事件並更新observable。