コレクションのチュートリアルの元のバージョンは、learn.knockoutjs.com から入手しました。選択すると利用可能な食事を変更する食事の種類の選択を追加することにしました。
利用可能な食事は、それぞれ変更されるため、個々のリスト項目に移動する必要があることを発見しました
function SeatReservation(name, initialMeal, initialMealType) {
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal);
// Non-editable catalog data - would come from the server
self.availableMeals = ko.observableArray([
{ mealName: "Standard (sandwich)", price: 0, mealType: 1},
{ mealName: "Premium (lobster)", price: 34.95,mealType: 2 },
{ mealName: "Ultimate (whole zebra)", price: 290, mealType: 3 }
]);
個別の予約内にも食事の種類を作成しました。
self.mealType= ko.observable();
次に、利用可能な食事の種類のリスト:
// Non-editable catalog data - would come from the server
self.availableMealTypes = [
{ mealTypeName: "Vege", key: 1 },
{ mealTypeName: "Dead Animal", key: 2 },
{ mealTypeName: "Meat Whore", key: 3}
];
その後、HTML にバインドされました。
最後に、食事の種類の変更をサブスクライブし、この関数で利用可能な食事のコレクションを変更しました。
self.mealType.subscribe(function() {
if (self.mealType().key == 1)
{
self.availableMeals ([
{ mealName: "Vegemite Sandwich", price: 4.00, mealType: 1},
{ mealName: "Cheese Sandwich", price: 34.95,mealType: 2 },
{ mealName: "Jam Sandwich", price: 290, mealType: 3 } ]);
}
最終的で完全なソリューションは、この jsFiddleで見ることができます。