2

我有一個項目,直到最近使用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/

要重新創建行爲,只需在自動填充中輸入識別的值。在自動完成框打開後,將該輸入切換到下一個輸入。輸入中的值完全清除。如果您完成了在自動填充中鍵入值(不選中它)並且停用,則甚至會發生這種情況。

在此示例中,無論輸入的值是否包含在列表中的某個項目中,預計選項卡關閉都不會清除自動填充。

任何幫助,這將不勝感激。謝謝!

回答

2

看來,原來的jqAuto綁定被設計爲與內置的value綁定分開工作,而不是要求。你們一起使用,看起來他們正在彼此踩腳趾。

我沒有試圖在代碼中做得太深,但是我能夠跟蹤哪個部分正在清除輸入字段。它來自jqAuto.update函數。通過消除這個功能,我能夠解決這個問題。我也看不出在你的例子中刪除它的任何缺點。我認爲這是事實,因爲value綁定處理更新輸入字段。

http://jsfiddle.net/xYm6U/7/

+0

哇。謝謝!我懷疑這在Knockout 2.3中起作用的原因是因爲3.0的綁定現在是獨立刷新的。雖然這一改變「打破」了現有的代碼,但我對這一改變感到滿意,因爲它鼓勵我們有更好的編碼習慣。非常感謝! – AaronBastian