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

时间:2011-10-20 13:21:55

标签: 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;
},

PHP返回一个JSON字符串:

{"response": "Model saved!"}

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

Unknown column 'response' in 'field list'

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

2 个答案:

答案 0 :(得分: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#section-41http://documentcloud.github.com/backbone/docs/backbone.html#section-145)。

答案 1 :(得分:7)

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

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

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

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;
    },

    ...

});