ボタンをクリックすると特定のdivを表示または非表示にするコードを記述しました。コードはthis fiddleです。 コードはうまくいきましたが、疑問は、ボタンのクリックでobservable a
とb
の値を変更すると、toShow
メソッドはどのように呼び出されますか?ノックアウトJS宣言的バインディングの内部的な動作
「testViewModel
」で何か変わるたびに呼び出されますか? の中にはいつでも()
を使用する必要がありますか?
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());