2013-05-24 2 views
1

Я думаю, что это может быть больше языковой проблема, а не рамочный вопрос, но здесь идет:Инициализация Нокаут значение флажка

Я с настройкой начального значения флажка проблемой.

Ive добавил 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++; 
} 

ответ

1

С синтаксисом (3, true) вы с помощью Comma Operator и не создает объект.

Оператор запятой оценивает свой второй аргумент (в данном случае - 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); 
}); 

Потому что функция обратного вызова arrayMap принимает аргумент: текущий элемент, и вы можете получить доступ к quote и isChecked от этого текущего элемента.

Demo JSFiddle.

+0

Это великорусского большое спасибо за это. Я уже пробовал объявление {quote :, ischecked:}, но это не сработало, так как до сих пор я до конца не понимал часть изменения цены. – donpisci

Смежные вопросы