在更改viewmodel属性之前执行函数

时间:2014-01-28 17:10:14

标签: javascript jquery ajax knockout.js

我有一个视图,其中显示员工信息。在该视图中,我有一个复选框,例如: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。

有任何建议吗?

1 个答案:

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