我有一个非常简单的视图模型:
var ViewModel = function() {
this.showRow = ko.observable(false);
this.toggleVisibility = function() {
if(this.showRow == true){
this.showRow = false;
}
else{
this.showRow = true;
}
alert('showRow is now '+this.showRow); //only here for testing
};
};
同样简单的标记:
<a href="#" data-bind="click: toggleVisibility">Toggle</a>
<br />
<table>
<tr data-bind="visible: showRow">Some Text</tr>
</table>
我的问题是,当点击链接时,警告框会显示(显示正确的值 - true / false)
然而,tr
元素上的可见绑定似乎不起作用 - 最初(行在加载时应该是不可见的),也不是showRow
的值切换。
上面的jsFiddle- http://jsfiddle.net/alexjamesbrown/FgVxY/3/
答案 0 :(得分:9)
您需要按如下方式修改html:
<table>
<tr data-bind="visible: showRow"><td>Some Text</td></tr>
</table>
JavaScript如下:
var ViewModel = function() {
var self = this;
self.showRow = ko.observable(false);
self.toggleVisibility = function() {
self.showRow(!self.showRow());
alert('showRow is now ' + self.showRow());
};
};
ko.applyBindings(new ViewModel());
将值设置为observable属性的语法为:self.showRow(value);
如果需要在标签内部添加标签。
我还修改了你的小提琴以简化javascript并遵循关于“this”的新代码实践。见http://jsfiddle.net/FgVxY/4/