1

我认为这可能更多是语言问题而不是框架问题,但这里有:

我无法设置复选框的初始值。

我添加了一个jsFiddle

谢谢!

这是麻烦的代码:

var allPrices = [
        { month: 'January', prices: [ (3, true), (4, false), (4, false), (4, false)] },
        { month: 'February', prices: [(3, true), (4, false), (4, false), (4, false)] },
        { month: 'March', prices: [(3, true), (4, false), (4, false), (4, false)] }
    ]        

//--Page ViewModel
var id = 1;

//--Set the structure for the basic price object
function Price(quote, isChecked) {
    this.quote = ko.observable(quote);
    this.valid = true;
    if (isNaN(quote)) {
        this.valid = false;
    }
    this.selected = ko.observable(isChecked);
    this.id = id;
    id++;
}
4

1 回答 1

1

(3, true)使用逗号运算符而不是创建对象的语法。

逗号运算符计算其第二个参数(在本例中为true),因此它不会像您预期的那样创建值为 3 和 true 的对象。

您需要使用{}来创建一个对象,并且还需要一些属性名称,因此您需要将价格重写为:

prices: [ 
    { quote: 3, isChecked: true}, 
    { quote: 4, isChecked: false}, 
    { quote: 4, isChecked: false}, 
    { quote: 4, isChecked: false} ]

您需要将价格创建更改为

this.prices = ko.utils.arrayMap(prices, function (item) { 
     return new Price(item.quote, item.isChecked); 
 });

因为 take on 参数的回调函数arrayMap:当前项目,您可以从该当前项目访问quoteand isChecked

演示JSFiddle。

于 2013-05-24T09:09:32.307 回答