使用Backbone进行延迟验证

时间:2014-12-22 14:03:22

标签: javascript validation backbone.js deferred

我使用backbone validation库来验证我的骨干模型。我想创建一个自定义验证,它将转到服务器并检查id是否是唯一的。我的问题是我无法正确处理延期响应。

validation: {
    'userId': {
        required    : true,
        fn  : function(val, attr, computedState){
            this.validateUniqueUserId(val, attr, computedState).done(function(data, textStatus, jqXHR){
                console.log('got response');
                if (data.metadata.totalCount) {
                    return 'User Id must be unique'
                }
            });
        }
    }
},

validateUniqueUserId: function(val, attr, computedState){
    return this.validateOnServer({
        url     : 'myurl/?userId=' + val,
        attr    : 'userId',
        val     : val
    });
},

validateOnServer: function(options){
    this.trigger('validating', { attr: options.attr });

    return Backbone.ajax({
        url                 : options.url,
        type                : 'GET',
        ignoreErrorGlobally : false
    });
}

所以我的呼叫转到服务器并正确验证所需的属性并返回我期望的响应。我认为,问题在于行return 'User Id must be unique'的背景。当userId已经存在但看起来此行必须在done回调之外时,我按预期点击了这一行。

例如,以下工作正常:

validation: {
    'userId': {
        required    : true,
        fn  : function(val, attr, computedState){
            return 'User Id must be unique'
        }
    }
},

有人能指出我正确的方向吗?

0 个答案:

没有答案