2013-11-24 33 views
0

我使用日期選擇器,只要我從日曆中選擇日期,就會將某些文本輸入到輸入中。更新程序化填充輸入的挖空綁定?

我還有一些其他的輸入實例也通過第三方工具進行填充。

問題是,在重新綁定發生之前,我必須在輸入之後按下輸入鍵。如果我不這樣做,那麼這個觀測值不會更新。

類似的問題:knockout valueUpdate not working with Pagedown?

有什麼辦法手動重新綁定元素,所以當我按「保存」這些觀測,可以準確地約束?

+0

怎樣的日期選擇器更新輸入元件?日期選擇器元素綁定到可觀察的淘汰賽嗎?你可以發佈一些代碼?謝謝。 –

+0

@VinneyKelly這裏有一個例子:http://jsfiddle.net/BcuLq/這是使用pagedown,但datepicker遇到同樣的問題。如果您單擊任何菜單按鈕來更改文本,則只有在您手動輸入某些內容後,觀察值纔會更新。 – RobVious

回答

2

至於什麼@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可能會發生變化)

+0

我剛剛回過來提交完全這個(好吧,不完全......這將是可怕的)。 KO + bindingHandlers +模板= UI忍術! –

0

一般來說,您需要創建一個自定義綁定,該自定義綁定使用小部件提供的任何通知API(儘管首先檢查是否有其他人尚未創建該通知)。這其實很簡單, Knockout的創建者認爲編寫自定義綁定是使用Knockout的常規方面(就像Angular的創建者認爲編寫自己的指令是使用它的常規方面一樣)。確切的細節取決於特定的小部件。

這是必要的原因是Knockout的輸入元素的本機綁定監聽瀏覽器事件,如changekeypress。但是,當編程改變輸入元素時,瀏覽器不會自動發出事件,所以綁定不知道發生了什麼。