【问题标题】:Backbone - boostrap data with isNew attribute set to falseBackbone - 新属性设置为 false 的引导数据
【发布时间】:2012-07-11 06:37:10
【问题描述】:

我正在使用主干并根据实践引导一些数据 (http://documentcloud.github.com/backbone/#FAQ-bootstrap)。

但是,现在当我保存任何自举模型时,Backbone 会将模型视为服务器上不存在的模型 (model.isNew === true, http://backbonejs.org/#Model-isNew),然后使用方法“create”调用 Backbone.sync而不是“更新”。因此,调用的是 POST 而不是 PUT HTTP 方法。

如何将 isNew 设置为 false 的自举模型,即骨干网将它们视为服务器上存在的模型?

【问题讨论】:

    标签: backbone.js bootstrapping


    【解决方案1】:

    显然,model.isNew 取决于 id 是否设置为此处解释的:http://backbonejs.org/#Model-isNew。这意味着使用 id 集引导数据可以解决我的问题

    【讨论】:

      【解决方案2】:

      我最近遇到了这个问题,我通过覆盖我的 Backbone 模型中的 parse()、initialize() 和 isNew() 函数克服了这个问题。

      initialize() 函数将“loadedFromServer”属性初始化为 false。

          initialize: function () {
              this.loadedFromServer = false;
          },
      

      parse() 函数将 'loadedFromServer' 属性设置为 true 并返回响应:

          parse: function (response) {
              this.loadedFromServer = true;
              return response;
          },
      

      isNew() 函数然后检查 id(对于空白模型)或 id 是否已设置,但未同步到服务器:

          isNew: function () {
              return !this.id || !this.loadedFromServer;
          }
      

      这满足以下测试:

      isNew() 获取时报告错误 isNew() 在没有设置 id 时报告 true isNew() 在设置了 id(用于 PUT)但从未获取时报告 true

      【讨论】:

      • 经过反思,这可能是不明智的,因为在 model.save() 中使用了 isNew() 函数来决定是 POST 还是 PUT。
      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多