1
function MyViewModel() {
    var self = this;
    this.firstName = ko.observable('Planet');
    this.lastName = ko.observable('Earth');
    this.computedState = ko.observable(false);

    this.fullName = ko.computed({
        read: function () {
            console.log("READ");            
            return this.firstName() + " " + this.lastName(); 
        },
        write: function (value) {
            console.log("WRITE");    
            var lastSpacePos = value.lastIndexOf(" ");
            if (lastSpacePos > 0) { // Ignore values with no space character
                this.firstName(value.substring(0, lastSpacePos)); // Update "firstName"
                this.lastName(value.substring(lastSpacePos + 1)); // Update "lastName"
            }
        },
        owner: this,

        disposeWhen : function(){ return self.computedState(); }
    });
}

ko.applyBindings(new MyViewModel());

即使我将其处理掉,计算出的 observable 仍然会触发写入。这是正确的行为吗?我不明白原因。 JSFIDDLE 示例

4

1 回答 1

1

处理一个计算出的 observable 将使它清理所有的订阅。因此,虽然您仍然可以对其进行写入,但该read函数将不会再次运行。Disposal 不会取消计算的值,它是为了确保没有延迟订阅。

例如,在这个更新的示例中,尝试处理计算并更改firstName字段。

http://jsfiddle.net/rniemeyer/smwwb/13/

于 2012-08-03T11:49:07.247 回答