2012-01-23 6 views
3

페이지로드가 발생하면 서버가 주문 정보를 요청합니다 (이 시점에서 가능한 주문 유형 목록 및 주문의 현재 유형). 로드 후에 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' 
} 
+0

일부 콘솔 메시지에서이를 확인했습니다. 목록의 두 번째 옵션은 "선택"되어 선택된 것으로 템플릿에 표시되지만 선택 항목은 실제로 첫 번째 항목 값에 그대로 있습니다. – Ominus

+0

다음과 같이 재현 할 수 있습니까? http://jsfiddle.net/rniemeyer/WtaLH/? 당신이보고있는 것을 나는 확실히 이해하고 있지 않습니다. 또한''을 사용하십시오. jsfiddle.net의 코드가 작동합니다. 내가 refresh_order_data에서 내 getJSON을 제거하고 샘플 데이터 (var initialData)를 응용 프로그램에서 사용하면 시스템이 제대로 작동합니다. 흥미 롭 군. – Ominus

답변

0

문제는 서버 측되었다 ... 초기로드 서버에서 들어오는. 클라이언트의 출력이 동일한 이유는 모르지만. 파이썬을 사용하여 json.dumps에서 반환 값을 래핑했습니다. 모든 것이 의도 한대로 작동합니다.

관련 문제