최근까지 Knockout 2.3을 사용하고 있었다는 프로젝트가 있습니다. 3.0으로 업그레이드했을 때, 우리는 jQuery 자동 완성에 대한 바인딩이 요소에 초점을 맞추지 못해 더 이상 값을 유지하지 못하는 것으로 나타났습니다. 처음에는 값이 자동 완성에서 지워지고 해당 요소에 대한 포커스가 복원되면 올바른 동작이 발생합니다.녹아웃 3.0 입력 탭이 꺼짐 값
우리가 사용하는 http://jsfiddle.net/rniemeyer/YNCTY/
요점은 (이 문제와 관련이없는 일부 사용자 지정 자동 완성 목록 및 행동에 대한 몇 가지 수정과) 핸들러를 바인딩 RP Neimeyer의 jQuery를 자동 완성이 자동 완성은 녹아웃에 전혀 문제와 함께 일 2.3,하지만 우리가 업그레이 드 후 응용 프로그램에 걸쳐 깨진했다. 이 이론을 테스트하기 위해 나는 일시적으로 Knockout 2.3으로 다운 그레이드했고 문제는 해결되었습니다. 그러나 새로운 기능을 위해 3.0에 추가 된 observableArray 변경 기능 때문에 영구적으로 2.3으로 다운 그레이드하는 것도 옵션이 아닙니다. 이 같은
우리의 바인딩 외모 :
<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/
에 있습니다.3210동작을 다시 만들려면 자동 완성에서 인식 된 값을 입력하기 만하면됩니다. 자동 완성 상자가 열리면 해당 입력을 탭 해제하고 다음 입력으로 탭 해제하십시오. 입력 값이 완전히 지워집니다. 이것은 심지어 자동 완성에서 값을 입력하고 (선택하지 않고) 탭핑을 끝내면 발생합니다.
이 예제에서는 입력 된 값이 목록의 항목 중 하나에 포함되어 있는지 여부에 관계없이 탭이 자동 완성을 지우지 않을 것으로 예상됩니다.
이 문제에 도움을 주시면 매우 감사하겠습니다. 감사!
와우. 감사! 나는 이것이 3.0의 바인딩이 이제 독립적으로 새로 고침되기 때문에 이것이 Knockout 2.3에서 작동 한 이유라고 생각합니다. 이 변경이 기존 코드를 "파손"하는 동안 더 나은 코딩 방법을 사용하도록 권장하므로이 변경 사항에 만족합니다. 감사합니다! – AaronBastian