我有一个视图,其中显示员工信息。在该视图中,我有一个复选框,例如:Recieve Daily Email
。当用户单击该复选框时,我需要执行AJAX功能作为验证,以检查用户是否可以更改该设置:
If result is true: allow knockout to change the ViewModel Property
If result is false: prevent knockout to change the ViewModel Property
我做了一个简单的demo来证明我的问题。我认为我的AJAX函数'll return false
。尝试单击复选框,然后单击按钮以检查ViewModel值,虽然未选中(因为return false
),但它将为true。
有任何建议吗?
答案 0 :(得分:0)
我不确定您希望用户在检查时看到的确切行为,但是不允许这样做,但是这样的好方法是使布尔值可观察并手动订阅更改。
当您创建Person
时,它可能就像:
function Person(name, receiveMail) {
this.name = name;
this.receiveMail = ko.observable(receiveMail);
this.receiveMail.subscribe(function() {
//do AJAX here
setTimeout(function() {
this.receiveMail(false);
}.bind(this), 1000);
}, this);
}
因此,我们使receiveMail
成为一个可观察的,并在视图模型中订阅它。当t改变时,你可以进行AJAX调用,然后做出相应的响应。
这是一个小提琴,演示了这一点以及错误消息:http://jsfiddle.net/rniemeyer/pMmvf/