我正在使用带有受保护的 observable 的 knockoutjs,并且遇到了复选框问题。可以在此处找到一种受保护的 observables 的实现,但我见过一些非常相似的实现。
可以在此处找到演示我的问题的 jsFiddle 。这是小提琴的一部分。
var ViewModel = function() {
var self = this;
self.protectedBool = ko.protectedObservable(true);
self.commit = function(){
ko.commitProtectedObservables(self);
};
self.rollback = function() {
ko.rollbackProtectedObservables(self);
};
};
$(function() {
ko.applyBindings(new ViewModel());
});
要复制,请执行以下操作:
- 运行小提琴(复选框的默认值为 true)
- 取消选中复选框
- 点击“提交”
- 请注意,该值现在显示为 false(这是正确的行为)
- 再次运行小提琴(复选框的默认值为 true)
- 取消选中复选框,然后立即检查(在单击“提交”之前)
- 点击“提交”
- 您将看到该值将设置为 false/unchecked,即使在您单击“提交”时它已被选中。
在 protectedObservable 定义中计算的 observable 中的“write”事件不会在您第二次更改复选框时被触发,因此当提交值时,它会提交不正确的值。
另请注意,protectedObservable 非常适用于字符串。任何指导将不胜感激。