2

최근까지 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

동작을 다시 만들려면 자동 완성에서 인식 된 값을 입력하기 만하면됩니다. 자동 완성 상자가 열리면 해당 입력을 탭 해제하고 다음 입력으로 탭 해제하십시오. 입력 값이 완전히 지워집니다. 이것은 심지어 자동 완성에서 값을 입력하고 (선택하지 않고) 탭핑을 끝내면 발생합니다.

이 예제에서는 입력 된 값이 목록의 항목 중 하나에 포함되어 있는지 여부에 관계없이 탭이 자동 완성을 지우지 않을 것으로 예상됩니다.

이 문제에 도움을 주시면 매우 감사하겠습니다. 감사!

답변

2

원래 jqAuto 바인딩은 내장 된 value 바인딩과 별도로 작동하도록 설계되었으며 필요하지 않습니다. 당신은 둘 다 함께 사용하고 그들은 서로의 발가락을 밟고있는 것 같습니다.

코드에 너무 깊이 들어가려고하지는 않았지만 입력 부분을 지우는 부분을 추적 할 수있었습니다. 그것은 jqAuto.update 함수에서 왔습니다. 이 기능을 제거함으로써 문제를 해결할 수있었습니다. 나는 또한 당신의보기에서 그것을 제거하는 어떠한 단점도 볼 수 없었다. 나는 value 바인딩이 입력 필드를 업데이트하기 때문에 사실이라고 생각합니다.

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

+0

와우. 감사! 나는 이것이 3.0의 바인딩이 이제 독립적으로 새로 고침되기 때문에 이것이 Knockout 2.3에서 작동 한 이유라고 생각합니다. 이 변경이 기존 코드를 "파손"하는 동안 더 나은 코딩 방법을 사용하도록 권장하므로이 변경 사항에 만족합니다. 감사합니다! – AaronBastian