2012-11-29 72 views
2

喜變化,我知道valueUpdate:afterkeydown會做模型更新用戶輸入後,但我想知道我該怎麼辦valueUpdate後自動其他一些JavaScript代碼更改值淘汰賽:valueUpdate從javascript代碼

我有一個js代碼,它確實document.getElementById(「input」)。value =「new value」;

我必須手動更新模型或我應該使用什麼valueUpdate。

回答

4

如果觸發元素的change事件,那麼元素的綁定(value)將選取並正常處理它。

但是,通常情況下,您希望通過視圖模型進行更新,並讓綁定處理設置元素的屬性,但是如果您有直接與無法更改的元素交互的第三方或現有代碼, change事件是一個解決方案。

淘汰賽確實包含一個實用程序,用於正確觸發名爲ko.utils.triggerEvent的跨瀏覽器的事件。

您的代碼可能是這樣的:

var elem = document.getElementById("input"); 
    elem.value = "new value"; 
    ko.utils.triggerEvent(elem, "change"); 
+0

這樣的事情使Knockout更容易集成到現有的代碼庫中。我有一個郵政編碼查找,使用ajax調用來獲取城市和州,並更新窗體,但沒有更新視圖模型。這足以讓它工作。在所有使用它的頁面都使用淘汰賽之前,不會更新郵政編碼查找。謝謝! – sockmonk

+0

它在我的'粘貼'處理程序中效果很好。但我想知道爲什麼data-bind =「value:some,valueUpdate:'paste'」不起作用? – bob

+0

我可以像使用jQuery一樣使用$(thisid).parent()。parent()。find(「.classname」)document.getElementById(「input」) –

1

在更新輸入值的行之後,調用observable.valueHasMutated(),無論哪個observable對應於您要更改的輸入。

+1

調用'valueHasMutated'將傳播模型值出任何用戶(綁定),並覆蓋該被做了手動更改。在這種情況下,你會想要觸發'change'事件,這樣'value'綁定就會啓動你的改變。 –