2013-04-19 9 views
5

Problem występuje wtedy, gdy wybrane opcje zostały zmienione, wartość nie jest aktualizowana.Knockoutjs nie aktualizuje wartości, gdy zmieniono wybrane opcje.

Kiedy więc zmieniam Hondę na Toyotę, opcje w drugim wyborze uległy zmianie, ale wybrano ModelMozelable not not. Musiałem coś przeoczyć.

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 Fiddle: http://jsfiddle.net/apuchkov/n4VyD/

+0

Robi dziwne po zmianie zrobić, to zmienić z powrotem. W tym momencie patrzy na poprzednią wartość modeli. –

+0

Znam ten stary post. Problem został rozwiązany w najnowszej wersji knockoutjs (3.2.0) [JSFiddle] (http://jsfiddle.net/n4VyD/93/) – pravin

Odpowiedz

2

Nie jestem pewien, dlaczego to nie działa jak jest, ale jeśli założyć prenumeratę modele, można ręcznie zmienić wybrany model.

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

Dobre obejście, dzięki. Można nawet uprościć do self.selectedModel (value); Nadal ciekawy, co jest nie tak z oryginalnym przykładem. Jeśli czegoś brakuje lub jest to błąd Knockout. –

Powiązane problemy