Я написал код, который по нажатию кнопки показывает или скрывает определенный div. Код находится в this fiddle. Код работает нормально, но я сомневаюсь, когда я изменяю значение наблюдаемого a
и b
при нажатии кнопки, а затем как вызывается метод toShow
?How Knockout JS Declarative Binding внутренне работает
Вызывается ли это, когда что-то меняется в моем 'testViewModel
'? Также, когда мне нужно использовать ()
внутри data-bind
?
HTML код:
<button data-bind="click: $root.changeValue">Click Me!</button>
<div data-bind="foreach: products">
<div data-bind="visible: $root.toShow()">
<div data-bind="text: name"></div>
<div data-bind="text: age"></div>
<div data-bind="text: gender"></div>
</div>
</div>
Javascript Код:
function testViewModel(){
var self = this;
self.a = ko.observable(0);
self.b = ko.observable(0);
var prod = [];
for(var item in products){
prod.push(new productItem(products[item]));
}
self.products = ko.observableArray(prod);
self.changeValue = function(){
self.a(self.a()+1);
self.b(self.b()+1);
}
self.toShow = function(){
if(self.a() % 2 === 0){
return true;
}
else{
return false;
}
}
}
function productItem(product){
var self = this;
self.name = ko.observable(product.name);
self.age = ko.observable(product.age);
self.gender = ko.observable(product.gender);
}
var products = [
{
name: 'A',
age: 25,
gender: 'Male'
},
{
name: 'B',
age: 27,
gender: 'Female'
},
{
name: 'C',
age: 53,
gender: 'Female'
},
{
name: 'D',
age: 54,
gender: 'Male'
}
]
ko.applyBindings(new testViewModel());