我只是在学习淘汰赛,遇到了使用列表的教程。
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";
});
}
在本教程中,此代码定义了可观察的餐食,这将是在下拉选择中选择的选项。如果我没有默认值,例如说我想使用单选组而不是select。我希望能够创建一个没有任何默认值的可观察对象。我尝试使用空字符串作为默认值,然后它可以工作
self.meal = ko.observable("");
反之,如果我尝试将null作为默认值,则选择选项甚至不会出现。
self.meal = ko.observable(null); // not working
什么是创建没有默认值的可观察对象的正确方法?
当然,您可以null
使用
self.meal = ko.observable(null);
或undefined
与
self.meal = ko.observable();
但是,在这种情况下,您必须处理以下情况:meal
如果实际上是if,null
或者undefined
因为当您编写类似self.meal().price;
内容的内容时会因为尝试访问“ nothing”属性而引发异常。
因此,您需要修复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()
情况:
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;
});
演示JSFiddle。
注意:它偶然使用空字符串(因为空字符串是一个对象,因此可以有效地访问它们上的属性,self.meal().price
但是所有这些属性都将返回undefined),因此这不是一个正确的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句