페이지로드가 발생하면 서버가 주문 정보를 요청합니다 (이 시점에서 가능한 주문 유형 목록 및 주문의 현재 유형). 로드 후에 select의 값은 "selected_order_type"으로 설정되어야합니다.knockout.js/바운드 드롭 다운 목록에서 이벤트 변경에 응답하는 방법
그러나 목록에서 선택하고 실제로 선택한 값의 "값"을 현재 값으로 설정하지 않은 것처럼 보입니다. 예를 들어,로드 할 때 두 번째 옵션을 선택합니다. 세 번째 옵션을 클릭하면 모든 옵션이 작동합니다. 첫 번째 옵션을 처음 클릭하면 아무 일도 일어나지 않습니다. 선택한 옵션으로 두 번째 옵션을 표시하더라도 여전히 첫 번째 옵션 값이 있기 때문에 가정합니다. (매우 녹아웃에 새로운 몇 시간 동안 그것을 사용하는 방법을 그냥 내 머리 주위를 얻으려고 노력).
<select id="order_type_select"
data-bind="options:order_types,
optionsText:'order_type',
optionsValue:'order_type_id',
value:selected_order_type"/>
function update_order_field(order_id,field,value){
var url = '/op/update_order_field'
data = {'order_id':order_id,'field':field,'value':value};
console.log(url);
console.log(data);
}
function refresh_order_data(order_id,view_model){
$.getJSON("/op/order_json/"+order_id,function(data){
ko.mapping.fromJS(data,view_model);
});
console.log(view_model.selected_order_type);
}
function OrderData(){
var self = this;
self.order_types = [{}]
self.selected_order_type = '0'
return self
}
$(document).ready(function() {
var order_id = $("#order_id").attr('order_id');
var view_model = ko.mapping.fromJS(new OrderData());
view_model.selected_order_type.subscribe(function(data){
console.log(data);
});
refresh_order_data(order_id,view_model);
ko.applyBindings(view_model);
});
데이터
{
order_types: [
{ order_type_id=1, order_type="Phone"},
{ order_type_id=2, order_type="Fax"},
{order_type_id=3, order_type="Web"}
],
selected_order_type = '2'
}
일부 콘솔 메시지에서이를 확인했습니다. 목록의 두 번째 옵션은 "선택"되어 선택된 것으로 템플릿에 표시되지만 선택 항목은 실제로 첫 번째 항목 값에 그대로 있습니다. – Ominus
다음과 같이 재현 할 수 있습니까? http://jsfiddle.net/rniemeyer/WtaLH/? 당신이보고있는 것을 나는 확실히 이해하고 있지 않습니다. 또한'' –
이 아닌 ''을 사용하십시오. jsfiddle.net의 코드가 작동합니다. 내가 refresh_order_data에서 내 getJSON을 제거하고 샘플 데이터 (var initialData)를 응용 프로그램에서 사용하면 시스템이 제대로 작동합니다. 흥미 롭 군. – Ominus