2013-04-19 14 views
5

選択オプションが変更されたときに値が更新されないという問題があります。選択オプションが変更されたときにKnockoutjsが値を更新しない

ホンダをトヨタに変更すると、セカンドセレクトのオプションがうまく変更されましたが、selectedModelは変更されません。私は何かを逃したに違いない。

はJavaScript:

function ViewModel() { 
    var self = this; 

    self.selectedMake = ko.observable() 
    self.selectedModel = ko.observable() 

    self.makes = ["Honda", "Toyota"]; 
    self.models = ko.computed(function() { 
     if (self.selectedMake() === "Honda") return ["CRV", "Accord"]; 
     if (self.selectedMake() === "Toyota") return ["Rav4", "Camry"]; 
     return []; 
    }); 
} 
$(function() { 
    ko.applyBindings(new ViewModel()); 
}); 

HTML:

<select data-bind="value: selectedMake, options: makes"></select> 
<select data-bind="value: selectedModel, options: models"></select> 
<p>Selected make: <b data-bind="text:selectedMake"></b></p> 
<p>Selected model: <b data-bind="text:selectedModel"></b></p> 

JSフィドル:http://jsfiddle.net/apuchkov/n4VyD/

+0

、その後、バックに変更。その時点で、それはモデルの以前の価値を見ています。 –

+0

私はこれを古いポストと知っています。この問題は最新のknockoutjs lib(3.2.0) [JSFiddle](http://jsfiddle.net/n4VyD/93/) – pravin

答えて

10

GitHubの答えを得ました。もし誰かがこの質問を見つけたら、ここにそれを再掲載してください。

これは、バインディングの順序が重要な場合です。 http://knockoutjs.com/documentation/binding-syntax.html#notes_for_multiple_bindings_on_a_single_element

<select data-bind="options: makes, value: selectedMake"></select> 
<select data-bind="options: models, value: selectedModel"></select> 

jsFiddleを参照してください:あなたが作る変更する場合それは奇妙な取得http://jsfiddle.net/n4VyD/4/

2

が、私はそれがそのまま働いていない理由はわからないんだけど、あなたはへのサブスクリプションを設定している場合モデルでは、選択したモデルを手動で変更できます。

function ViewModel() { 
    var self = this; 

    self.selectedMake = ko.observable() 
    self.selectedModel = ko.observable() 

    self.makes = ["Honda", "Toyota"]; 
    self.models = ko.computed(function() { 
     if (self.selectedMake() === "Honda") return ["CRV", "Accord"]; 
     if (self.selectedMake() === "Toyota") return ["Rav4", "Camry"]; 
     return []; 
    }); 

    self.models.subscribe(function(value) { 
     self.selectedModel(value[0]); 
    }); 
} 

$(function() { 
    ko.applyBindings(new ViewModel()); 
}); 

Fiddle

+0

で修正されています。 self.selectedModel(value)に単純化することもできます。元の例で何が間違っているのか不思議です。何かが欠落しているか、ノックアウトのバグです。 –

関連する問題