knockoutjs订阅方法被调用2次

时间:2012-12-27 11:00:12

标签: knockout.js

在knockoutjs订阅方法中,我还在subscribe方法中设置了属性值,这就是为什么方法被调用2次,第一次是在UI中更改值时,第二次是在subscribe方法中更改值时。

任何人都知道如何避免这种情况。

这是我的示例代码:

var ViewModel = function(first) {
    var self = this;
    self.firstName = ko.observable(first);
    self.firstName.subscribe(function(newValue) {
        alert(newValue);
        self.firstName(newValue.toUpperCase());       
    });

};

也放到jsfiddle http://jsfiddle.net/ndkhoiits/4ABuq/

1 个答案:

答案 0 :(得分:3)

在你的情况下,你可能需要一个带有getter和setter的计算observable

var ViewModel = function(first) {
    var self = this;
    self.firstName = ko.observable(first);
    self.firstNameForView = ko.computed({        
        read: function () {            
            return self.firstName();
        },        
        write: function (value) {            
            self.firstName(value.toUpperCase());
        },        
        owner: this    
    });
};

现在在数据绑定中使用firstNameForView。