打电话"写"击倒计算的功能

时间:2014-05-05 16:11:23

标签: knockout.js

当我点击.cloudChck复选框时,会调用cloudClicked,我得到JS错误"未捕获TypeError:boolean不是函数" 我想它调用了读取计算变量而不是写入函数。如何调用write函数?谢谢!

<input name="serviceType" value="Cloud" type="checkbox" class="cloudChck" data-bind="checked: isCloud, click: cloudClicked">   
<input name="serviceType" value="Desktop" type="checkbox" class="desktopChck" data-bind="checked: isDesktop, click: desktopClicked">   

function AppViewModel() {
    ...
    this.isDesktop = ko.computed({
       read: function (){
            if (provinceId === "foo" || provinceId === 'bar') {
                return true;
            }
            else return this.isDesktop;
        },
        write: function (value){
            this.isDesktop = value;
        },
    }, this);

    this.cloudClicked = function () {
        if (this.isDesktop == true) {
            this.isDesktop(false);
        }
        return true;
    };
}

1 个答案:

答案 0 :(得分:1)

用这段代码来解决问题...

this.isDesktopthis.isDesktop = value;

覆盖

Computed observables是依赖于一个或多个其他observable的函数,并且只要这些依赖项发生任何变化,它们就会自动更新。

您必须将this.isDesktop的值保存到另一个可观察对象。

也...

this.cloudClicked = function () {
    if (this.isDesktop == true) { //call computeds as a function this.isDesktop()
        this.isDesktop(false);
    }
    return true;
};

您需要调用this.isDesktop()来读取计算出的observable。

我会再次检查计算的observable上的docs ...但是不要放弃,淘汰赛值得学习曲线!