Knockout.js knockoutjs subscribe方法被调用2次

Knockout.js knockoutjs subscribe方法被调用2次,knockout.js,Knockout.js,在knockoutjs subscribe方法中,我还设置了subscribe方法中属性的值,这就是为什么该方法被调用了2次,第一次是在UI中更改值时,第二次是在subscribe方法中更改值时 任何人都知道如何避免这种情况 这是我的示例代码: var ViewModel = function(first) { var self = this; self.firstName = ko.observable(first); self.firstName.subscribe(

在knockoutjs subscribe方法中,我还设置了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());       
    });

};

在您的例子中,您可能需要一个带有getter和setter的计算可观察对象

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

在您的例子中,您可能需要一个带有getter和setter的计算可观察对象

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