Knockout JS数据绑定不评估javascript表达式

时间:2013-07-09 14:05:17

标签: knockout.js

我有一组复选框,用于控制页面上一组项目的可见性。我试图添加一些功能,这样当没有选中任何一个框时,所有项目都会显示出来。

我想我的第一个问题是,我可以在数据绑定中使用逻辑运算符,因为我在下面做了吗?从这里的文档(http://knockoutjs.com/documentation/binding-syntax.html)看来我应该能够。我试图避免为所有复选框创建一组额外的计算器。如果可能的话,我做错了什么?

<div data-bind="visible: (showStaff() || showAll())" class="procedure">

当我在Chrome中查看KnockoutJS检查器时,看起来好像只有&#34; showStaff()&#34;正在评估,而不是表达的其余部分。我也尝试了以下内容,因为我知道showStaff()和showAP()都有效。它仍然只评估了上半年。

<div data-bind="visible: (showStaff() || showAP())" class="procedure">

这是我的js:

var self = this;
self.showAP = ko.observable(true);
self.showTR = ko.observable(true);
self.showSR = ko.observable(true);
self.showStaff = ko.observable(true);
self.showNSW = ko.observable(true);
self.showGA = ko.observable(true);
self.showP14 = ko.observable(true);
self.showSW = ko.observable(true);
self.showAll = ko.computed(function () {
    var show;
    if (!self.showAP && !self.showTR && !self.showSR && !self.showStaff && !self.showNSW && !self.showGA && !self.showP14 && !self.showSW) {
        showAll = true;
        return show;
    }
    else {
        showAll = false;
        return show;
    }
});

2 个答案:

答案 0 :(得分:0)

你以错误的方式使用observable。修改您的计算如下:

self.showAll = ko.computed(function () {
    var show;
    if (!self.showAP() && !self.showTR() && !self.showSR() && !self.showStaff() && !self.showNSW() && !self.showGA() && !self.showP14() && !self.showSW()) {
        show = true;
        return show;
    }
    else {
        show = false;
        return show;
    }
});

答案 1 :(得分:0)

如果你想要一个可观察的值,你应该添加()。

self.showAll = ko.computed(function () {
    var show;
    if (!self.showAP() && !self.showTR() && !self.showSR() && !self.showStaff() && !self.showNSW() && !self.showGA() && !self.showP14() && !self.showSW()) {
        showAll = true;
        return show;
    }
    else {
        showAll = false;
        return show;
    }
});