2012-01-23 13 views
3

何が起こる必要がありますすることで注文タイプの順序(この時点ではそのリストだけとのIDについては、サーバーを呼び出し、ページがロードされます注文の現在のタイプ)。ロード後、selectの値は "selected_order_type"に設定する必要があります。それだけで、リストでそれを選択し、実際に現在の値に選択項目の「値」を設定していないように見えるしかしknockout.js/

。したがって、私の例では、ロード時に2番目のオプションが選択されます。私がクリックした場合は代わりに私が最初に何も起こらないとまだそれが選択されたオプションとして2番目のオプションを示していたにもかかわらず、最初のオプション値を持っていたので、私はそれを想定しています最初のオプションをクリックした場合には第三の選択肢のすべてが動作します。 (ちょうどそれが働く方法の周りに私の頭を得ることを試みるカップルの時間のためにそれを使用しているノックアウトに非常に新しい)。

<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

は、いくつかのコンソールメッセージでこれを検証意図したとおりにすべてが動作します。リストの2番目のオプションは、選択されているテンプレートに表示され、選択されたものは実際にはまだ最初のアイテムの値に置かれています。 – Ominus

+0

これを再現できますか?http://jsfiddle.net/rniemeyer/WtaLH/?私があなたが見ているものをかなり理解しているかわからない。また、あなたは '' 'むしろより