我使用日期選擇器,只要我從日曆中選擇日期,就會將某些文本輸入到輸入中。更新程序化填充輸入的挖空綁定?
我還有一些其他的輸入實例也通過第三方工具進行填充。
問題是,在重新綁定發生之前,我必須在輸入之後按下輸入鍵。如果我不這樣做,那麼這個觀測值不會更新。
類似的問題:knockout valueUpdate not working with Pagedown?
有什麼辦法手動重新綁定元素,所以當我按「保存」這些觀測,可以準確地約束?
我使用日期選擇器,只要我從日曆中選擇日期,就會將某些文本輸入到輸入中。更新程序化填充輸入的挖空綁定?
我還有一些其他的輸入實例也通過第三方工具進行填充。
問題是,在重新綁定發生之前,我必須在輸入之後按下輸入鍵。如果我不這樣做,那麼這個觀測值不會更新。
類似的問題:knockout valueUpdate not working with Pagedown?
有什麼辦法手動重新綁定元素,所以當我按「保存」這些觀測,可以準確地約束?
至於什麼@ebohlman是說的一個例子,
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor) {
var $el = $(element), value = valueAccessor;
$el.datepicker({
value: ko.unwrap(value),
onChange: function(newValue){
if (ko.isObservable(value)) {
value(newValue);
}
}
});
if (ko.isSubscribable(value)){
value.subscribe(function(){
$el.datepicker("set value", ko.unwrap(value));
});
}
}
}
(這是通過模塊的語義UI的模式,你的插件的API可能會發生變化)
我剛剛回過來提交完全這個(好吧,不完全......這將是可怕的)。 KO + bindingHandlers +模板= UI忍術! –
一般來說,您需要創建一個自定義綁定,該自定義綁定使用小部件提供的任何通知API(儘管首先檢查是否有其他人尚未創建該通知)。這其實很簡單, Knockout的創建者認爲編寫自定義綁定是使用Knockout的常規方面(就像Angular的創建者認爲編寫自己的指令是使用它的常規方面一樣)。確切的細節取決於特定的小部件。
這是必要的原因是Knockout的輸入元素的本機綁定監聽瀏覽器事件,如change
和keypress
。但是,當編程改變輸入元素時,瀏覽器不會自動發出事件,所以綁定不知道發生了什麼。
怎樣的日期選擇器更新輸入元件?日期選擇器元素綁定到可觀察的淘汰賽嗎?你可以發佈一些代碼?謝謝。 –
@VinneyKelly這裏有一個例子:http://jsfiddle.net/BcuLq/這是使用pagedown,但datepicker遇到同樣的問題。如果您單擊任何菜單按鈕來更改文本,則只有在您手動輸入某些內容後,觀察值纔會更新。 – RobVious