如何通过保存模型获得良好的响应

Gij*_*anB 11 backbone.js

使用backbone.js我正在保存模型.将PUT发送到服务器并返回响应.我第一次这样做,它返回成功,以下时间返回一个错误,因为在第一次将响应添加到模型之后.

在Backbone.js中保存功能:

saveCountry: function() {
    this.model.save({},{
        success: function(model, response) {
            console.log('success! ' + response);
        },
        error: function(model, response) {
            console.log('error! ' + response);
        }
    });
    this.render();

    return false;
},
Run Code Online (Sandbox Code Playgroud)

PHP返回一个JSON字符串:

{"response": "Model saved!"}
Run Code Online (Sandbox Code Playgroud)

在PUT之后得到一个错误作为响应,因为"响应"被添加到模型中:

Unknown column 'response' in 'field list'
Run Code Online (Sandbox Code Playgroud)

为什么响应会添加到模型中,我该如何预防?

dir*_*ira 7

来自Backbone关于模型的文档save:

设置模型属性的哈希值,并将模型同步到服务器.如果服务器返回不同的属性哈希,则将再次设置模型的状态. http://documentcloud.github.com/backbone/docs/backbone.html#section-41

如何使其工作:不要从服务器返回{"response":"Model saved!"}.只返回没有内容的成功(状态200).

如果保存不起作用,则返回带有错误的JSON,Backbone将使用您提供的JSON触发模型上的错误事件(请参阅http://documentcloud.github.com/backbone/docs/backbone.html#第41节http://documentcloud.github.com/backbone/docs/backbone.html#section-145).


dok*_*ebi 7

只是为了复活一个古老的线索......

并不总是可以/希望更改从服务器返回的响应.

另一个解决方案是覆盖模型中的解析来处理这个问题.对于您的情况,响应不适合您的所有模型,您可以在超类中执行.

MyModel = Backbone.Model.extend({
    parse: function(data) {
        delete data["success"];
        return data;
    }
});

Address = MyModel.extend({
    saveCountry: function() {
        this.model.save({},{
            success: function(model, response) {
                console.log('success! ' + response);
            },
            error: function(model, response) {
                console.log('error! ' + response);
            }
        });
        this.render();

        return false;
    },

    ...

});
Run Code Online (Sandbox Code Playgroud)