我有一個項目,直到最近使用Knockout 2.3。當我們升級到3.0時,我們注意到我們綁定到jQuery自動完成似乎不再保持它們的價值,第一次專注於所述元素失去了。在第一次在自動完成上清除該值並且該元素的焦點被恢復之後,會發生正確的行爲。Knockout 3.0輸入選項卡關閉清除值
我們正在使用RP Neimeyer的jQuery的自動完成裝訂處理器(與一些自定義自動完成列表和行爲不相關這個問題談幾點修改)http://jsfiddle.net/rniemeyer/YNCTY/
的一點是,這個自動完成,在淘汰賽沒有問題的工作2.3,但升級後在應用程序中被打破。爲了測試這個理論,我暫時降級到Knockout 2.3,問題解決了。然而,永久降級到2.3也不是一種選擇,因爲我們用於新功能的可觀察陣列更改功能已添加到3.0中。
我們結合這個樣子的:
<input id="stateIdAutoComplete" maxlength="50" data-bind="jqAuto: { autofocus: false }, jqAutoSource: stateIdFilterList, jqAutoSourceLabel: 'enteredValue', jqAutoSourceInputValue: 'value', jqAutoValue: stateIdFilterSelected, value: stateIdFilter, valueUpdate: 'input', tabEnterKey: keyPressEvent, attr: { placeholder: stateIdPlaceHolder }, preventBubble: 'click'" />
和視圖模型看起來是這樣的:
function viewModel(){
var self = this;
self.stateIdFilterList = ko.observableArray([{
enteredValue: '1',
value: '1'
},{
enteredValue: '2',
value: '2'
}, {
enteredValue: '3',
value: '3'
}]);
self.stateIdFilterSelected = ko.observable();
self.stateIdFilter = ko.observable();
self.stateIdPlaceHolder = 'State ID';
self.keyPressEvent = function(data){
};
}
還有一個更廣泛的代碼版本,包括必要的自定義綁定處理程序(儘管不是全部,但足以證明問題)在http://jsfiddle.net/aaronbastian/xYm6U/6/
要重新創建行爲,只需在自動填充中輸入識別的值。在自動完成框打開後,將該輸入切換到下一個輸入。輸入中的值完全清除。如果您完成了在自動填充中鍵入值(不選中它)並且停用,則甚至會發生這種情況。
在此示例中,無論輸入的值是否包含在列表中的某個項目中,預計選項卡關閉都不會清除自動填充。
任何幫助,這將不勝感激。謝謝!
哇。謝謝!我懷疑這在Knockout 2.3中起作用的原因是因爲3.0的綁定現在是獨立刷新的。雖然這一改變「打破」了現有的代碼,但我對這一改變感到滿意,因爲它鼓勵我們有更好的編碼習慣。非常感謝! – AaronBastian