ko.computed函数未定义

时间:2015-03-09 17:15:36

标签: knockout.js

我有两个代表名字的复选框。单击其中任何一个时,将更新selectedName() observable。另外,我有两个ko.computed函数来确定是否选中了复选框。每个都检查selectedName()值是否与名称匹配。

最终结果是复选框的行为类似于单选按钮。

为什么点击复选框会产生Uncaught TypeError: undefined is not a function

我也尝试过checked: NameIsJohn()checked: NameIsJohn() === 'True'。另外,我尝试将checkedValue: true绑定到输入元素。

<input type="checkbox" data-bind="click: selectedName('John'), checked: NameIsJohn">John</input>
<input type="checkbox" data-bind="click: selectedName('Jack'), checked: NameIsJack">Jack</input>

<script>

$(function() {
    var vm = function() {
        var self = this;
        this.selectedName = ko.observable();
        this.NameIsJohn = ko.computed( function() {
            return self.selectedName === 'John';
        });
        this.NameIsJack = ko.computed( function() {
            return self.selectedName === 'Jack';
        });
    };

    ko.applyBindings(new vm());
)};

</script>

http://jsfiddle.net/h3ek75nx/

1 个答案:

答案 0 :(得分:1)

执行此操作时:

data-bind="click: selectedName('John')"

您没有将click绑定到函数selectedName。您正在绑定,请单击调用selectedName('John')返回值。当然,这是undefined,因此是您的错误。

您需要为function绑定提供click。您可以通过简单地将调用包装在函数中来实现:

data-bind="click: function() { selectedName('John') }"