我从 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 } ]);
}
最终完整的解决方案可见this jsFiddle。