2014-12-04 102 views
0

我正在使用html5 <input type="date">以及敲除綁定。我對不支持html5日期的瀏覽器使用webshim。以編程方式更新Webshim日期

原生html5瀏覽器工作正常,更改日期更改模型,以編程方式更改模型更改日期輸入中顯示的日期。

在不支持html5的瀏覽器(例如IE8)上更改日期可以正常工作並更新挖空模型,但反之並不正確。對模型的更改不會傳播到Webshim生成的日期選擇器,而只會傳播到webshim使用的隱藏輸入。

是否有一個webshim提供的方法或事件,我可以調用或觸發它來告訴它查看數據並在更改後更新UI?我怎麼能寫一個敲除綁定來調用這個?

+0

我不知道webshim是如何工作的,但可能需要爲它實現自定義binging http://knockoutjs.com/documentation/custom-bindings.html – Vladimirs 2014-12-04 12:17:10

回答

2

事實證明,webshim要求您使用jQuery()。val()來更新日期,而不是直接使用DOM。我可以寫一個淘汰賽結合,通過延長正常值結合這樣做:

ko.bindingHandlers.date = $.extend({}, ko.bindingHandlers.value); 

ko.bindingHandlers.date.update = function(element, valueAccessor) { 
    // Set value using jQuery val method as this is caught internally by webshim 
    $(element).val(valueAccessor()()); 
}; 

然後,我可以使用:

<input type="date" data-bind="'date': date"> 

正如所預期的。

+0

這是一種webshim模式。因此我會添加一個prop和一個attr綁定來使其更通用。 – 2014-12-05 00:07:41