我正在学习淘汰赛,遇到了使用列表的教程。
function SeatReservation(name, initialMeal) {
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal);
self.formattedPrice = ko.computed(function() {
var price = self.meal().price;
return price ? "$" + price.toFixed(2) : "None";
});
}
在本教程中,此代码定义了一个可观察的用餐,这将是下拉选择中选择的选项。如果我没有默认值,例如我想使用无线电组而不是选择。我希望能够创建一个没有任何默认值的observable。我尝试使用空字符串作为默认值,然后它可以正常工作
self.meal = ko.observable("");
如果我尝试将null作为默认值,则甚至不会出现选择选项。
self.meal = ko.observable(null); // not working
创建没有默认值的observable的正确方法是什么?
答案 0 :(得分:4)
当然,您可以使用
将您的观察结果初始化为null
self.meal = ko.observable(null);
或{/ 1}}
undefined
但是,在这种情况下,您必须在 self.meal = ko.observable();
实际meal
或null
时处理此案例,因为当您写出类似 undefined
的内容时,它会抛出异常是因为您尝试访问"没有" 。
所以你需要修复self.meal().price;
计算:
formattedPrice
计算self.formattedPrice = ko.computed(function() {
if (!self.meal())
return "None";
var price = self.meal().price;
return price ? "$" + price.toFixed(2) : "None";
});
以检查totalSurcharge
案例:
self.meal()
演示JSFiddle。
注意:它是偶然使用空字符串(因为空字符串是一个对象,所以访问它们的属性是有效的,如self.totalSurcharge = ko.computed(function() {
var total = 0;
for (var i = 0; i < self.seats().length; i++)
{
if (self.seats()[i].meal())
total += self.seats()[i].meal().price;
}
return total;
});
但是所有这些都将返回undefined)所以它不是适当的解决方案。