验证保存并保存().完成 - 在主干中

Kri*_*iss 1 backbone.js

我的模型验证有问题.似乎不可能使用save().complete(function(){.....与验证同时 - 这里是代码:

我的模特:

 App.Models.Task = Backbone.Model.extend({

defaults: {

    title:'',
    completed: 0

},

validate: function (attrs, options) {

    if(attrs.title == '' || attrs.title === undefined) {
        return "fill title pls"
    }

},

urlRoot: 'tasks' 
});
Run Code Online (Sandbox Code Playgroud)

然后在我的视图中我尝试将其保存在添加方法中:

 App.Views.TaskAdd = Backbone.View.extend({

tagName: 'div',

template: template('taskTemplateAdd'),

events : {

    'click .addTask' : 'add'
},

initialize: function () {

    this.model.on('add',this.render, this)


},

add : function () {

    var title = $("#addNew input:eq(0)").val();
    var completed = $("#addNew input:eq(1)").val();

    this.model.set('title', title);
    this.model.set('completed', completed);

    this.model.save({},
                 {
                   success: function (model, response) {
                   console.log("success");
                 },
                   error: function (model, response) {
                   console.log("error");
                 }
               }).complete(function () {

                    $("<div>Data sent</div>").dialog();
            $('#list').empty();
          });

},


render: function () {

    this.$el.html(this.template(this.model.toJSON()));
    return this
}

});
Run Code Online (Sandbox Code Playgroud)

验证火灾时我得到错误:

Uncaught TypeError: Object false has no method 'complete' 
Run Code Online (Sandbox Code Playgroud)

我明白它尝试可能在返回值上运行完整的回调但是如何解决这个问题?

Wir*_*rie 6

Model.save被载入文件返回jqHXR对象,如果成功,或者false如果没有.

因此,除非您的服务器永远不会失败,否则您需要处理save返回的情况false.这是您需要的逻辑的简单示例:

var valid=this.model.save();
if(!valid) {
    // do something when not valid
else {
    valid.complete(function() {}); // this is a jqHXR when valid
}
Run Code Online (Sandbox Code Playgroud)

而且,在jQuery 1.8,使用的complete过时.你应该考虑always改用.