사용자 정의 드롭 다운을 만들려고합니다. 모든 요소를 가져올 메서드 이름을 가지며 녹아웃 모델 바인딩 전에 목록이 채워질 때까지 기다려야합니다. 주어진 메소드에서 가져온 후 기본 동작을 시작합니다.녹아웃의 사용자 지정 드롭 다운 목록
지금까지 주어진 방법으로 데이터를 채우는 데 성공했습니다. 하지만 문제는 내 init 메소드가 비동기 작업을 완료 할 때까지 녹아웃 바인딩을 기다리는 방법을 알려주는 것입니다. Extender이 작업을 수행 할 수
ko.bindingHandlers.serviceMethod = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var serviceName, optionsValue, optionsText, value, optionsCaption, isCompleted;
if (element.nodeName == 'SELECT') {
optionsValue = allBindings().optionsValue || 'value';
optionsText = allBindings().optionsText || 'text';
serviceName = valueAccessor();
var l = $(element);
serviceName.apply().done(function (results) {
l.empty();
$.each(results.List, function (j, result) {
l.append($("<option />").val(result[optionsValue] || '').text(result[optionsText] || ''));
})
});
}
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
//what to do now in order to let knockout wait for list to be populated
}
}
내 바인딩
는, 데이터를 사용할 수있을 때까지<select name="state" data-bind="serviceMethod:registrationService.getAllStates,value: model.state" id="ddlState"></select>
처럼 사용 나는 그것을 달성하는 방법, 처음에는 확장되어 그 답장을 보내 주셔서 감사합니다, 솔루션은 좋지만 그 같은 드롭 다운 목록을 사용하지만 내가 원하는 것은 g 옵션을 선택하는 것입니다. 서버에서 iven. 매핑 플러그인을 사용하고 있습니다. 두 피들 렛을 살펴 보아라. 첫 번째 것은 내가해야 할 일이다. 대신 연기 된 응답의 값을 선택하는 것은 JSON 형식의 서버에서이 값을 사용하여 매핑 플러그인에서 뷰 모델을 가져 오는 데 사용된다. http://jsfiddle.net/u578D/1/ http://jsfiddle.net/R26pr/1/ –
두 번째 익스텐더를 사용하여 관측 대상을 게으른 초기화하도록 약간 변경했습니다. http://jsfiddle.net/R26pr/2/ – Martijn
이 상황을 처리하는 좋은 방법입니다, 나는 'populated'라는 관측 가능 변수를 기반으로 아약스 기반 변수를 확장하고 아약스 응답을받을 때마다 onDemandObservable에서 true로 만듭니다. 서버에서 내 viewModel에서 모든 아약스 기반 observables에 대한 계산 된 observable을 채우고 지연된 객체를 반환했으며 모듈 부트 스트랩 파일에 바인딩을 적용했습니다. –