在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/
答案 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。