【问题标题】:How to get a good response from saving a model如何从保存模型中获得良好的响应
【发布时间】:2011-10-20 13:21:55
【问题描述】:

使用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'

为什么将响应添加到模型中,如何防止它?

【问题讨论】:

  • 你不能只做一个条件并跳过你的 php 脚本中的“响应”吗?
  • 我可以,但我认为让服务器端决定响应会更干净。
  • 不,我认为如果响应来自 PHP(服务器端)会更干净,但是知道,正如 dira 建议的那样,我在客户端做。

标签: backbone.js


【解决方案1】:

来自 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)。

【讨论】:

    【解决方案2】:

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

    更改从服务器返回的响应并不总是可行/可取的。

    另一种解决方案是覆盖模型中的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;
        },
    
        ...
    
    });
    

    【讨论】:

      猜你喜欢
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2020-11-07
      • 2019-10-17
      • 2013-02-03
      相关资源
      最近更新 更多