knockout.js로 Select2를 사용합니다.Knockout.js inital 값이있는 Select2
그러나 컨트롤에 초기 값이 올바르게 표시되지 않습니다. select 함수가 발생하지 않는 것 같습니다.
내 문제를 설명하기 위해 기존 jsbin을 수정했습니다.
http://jsbin.com/xufovura/6/edit
바인딩 :합니다 (jsbin의 전체 코드를) 바인딩 정의의
<div data-bind="value: selectedState, select2: { data: states, placeholder: 'Select a State', formatResult: format ,initSelection: initSelect}" class="select2" style="width: 200px"></div>
부분 :
이ko.bindingHandlers.select2 = {
init: function(el, valueAccessor, allBindingsAccessor, viewModel) {
ko.utils.domNodeDisposal.addDisposeCallback(el, function() {
$(el).select2('destroy');
});
var allBindings = allBindingsAccessor(),
select2 = ko.utils.unwrapObservable(allBindings.select2);
$(el).select2(select2);
}
};
function initSelect(element, callback) {
console.log("initSelect");
var selectedItems = $.grep(this.states, function (e) { return e.id == element.id; });
console.log(element);
callback(selectedItems[0]);
}
는 이유는 당신의 initSelect 기능이없는이 방법은 또한 당신이 (즉, 단지 그것 ID가있어, 실제 "상태"개체를 저장하는) 대신 문자열 값의 객체에 백업 저장소를 변경해야해야합니다 select2가 자리 표시자를 선택했다고 생각한다는 것입니다. select2는 jQuery의 val 함수를 호출하여 요소의 현재 "값"을 읽으므로 div가 아닌 input 요소를 사용해야합니다. div 요소는 항상 ""을 반환합니다. –