0

在 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());       
    });

};

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

4

1 回答 1

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。

于 2012-12-27T11:07:13.543 回答