2011-08-24 58 views
20

我有一個隱藏的輸入值和值綁定到我的模型的觀察特性。我使用另一個內部更新隱藏輸入值的插件,但是observable不會更新它的值。如何強制可觀察到從讀取的DOM元素

我怎麼能強制觀察的以更新它從元素的值?

像valueHasMutated但在其他的方式。

謝謝

+1

我通過創建一個自定義綁定來解決問題,該自定義綁定更新插件更改值時的值。基本上這是相同的技術解釋在這裏:http://stackoverflow.com/questions/6612705/knockout-with-jquery-ui-datepicker –

+0

優秀!如果可以的話,你應該用你的解決方案來回答這個問題,並接受它,這樣有同樣問題的其他人可以看到你如何解決它。 –

+0

@Hugo - 你應該將其作爲回答發佈......因此它可以幫助其他人在未來找到這個問題! –

回答

23

我知道你已經想出了一個解決方案。

但我想我會發布我自己的櫃面任何人遇到這一點,因爲它是由高在谷歌搜索結果沒有答案,因此可能會派上用場的人。

ko.bindingHandlers.hiddenInputValue = { 

     init: function (element, valueAccessor) { 

      $(element).bind("change", function (event, data, formatted) { //hidden vars don't usually have change events, so we trigger $myElement.trigger("change"); 
       var value = valueAccessor(); 
       value($(this).val()); //rather than $(this).val(), might be best to pass our custom info in data 
      }); 
     }, 
     update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
      var value = valueAccessor(); 
      $(element).val(value); 
     } 

    }; 

和HTML

<input type="hidden" name="myName" id="myId" data-bind="hiddenInputValue: myModelValue" > 

因爲隱藏輸入沒有變化的事件通常情況下,你需要觸發自己的事件時你永遠改變數值例如

$("#myId").trigger("change"); 

我不知道這是否是最好的解決辦法,但最好我能想出在時間刻度,我努力:-)我可以把東西進入淘汰賽維基如果我拿出更優雅的東西。

+1

您可以使用內置的值處理程序('data-bind =「value:myObservable」'和相同的觸發器)獲得大部分或全部功能。 –

+0

可能淘汰賽自我發佈以來已更新,最後一次檢查因爲隱藏的輸入默認沒有變化事件,敲除不能用正常的值綁定工作。它現在是否與正常值綁定起作用? –

+1

是的,它在Knockout 2.0.0中起作用(還沒有嘗試過舊版本),但你仍然必須手動觸發這個變化 –

12

它的工作,加入$("hiddenInputId").trigger("change");我的情況不添加KO結合處理。

謝謝!

+2

這應該是被接受的答案,因爲最有可能的jQuery被用來更新隱藏的領域。如果正在使用另一個庫,那麼使用該庫的類似工作將會起作用。 –