【问题标题】:Backbone Collection - Model Update骨干集合 - 模型更新
【发布时间】:2012-07-31 09:21:00
【问题描述】:

我从服务器检索模型列表到集合中。当用户对特定模型感兴趣时,我会根据 id 将其路由到该模型的查看器。

现在,假设用户需要在视图中编辑该模型 - 例如:他更新了他的名字。我设置模型的 url,更新名称并调用保存。它调用后端(在我的例子中是泽西岛)并被保存。但是,该集合仍未自动更新。

为什么集合不能绑定到模型中的每个更改并自行更新?

保存作为集合一部分的模型的正确方法是什么?是否可以在模型上调用 save(通过设置其 url)然后从其父集合中删除,然后使用静默:true 再次添加它?

谢谢。

【问题讨论】:

  • 你不应该设置url,模型从它所属的集合中获取它的url(假设你遵循推荐的api格式)。 “集合不会自动更新”是什么意思?只要您使用属于集合的模型对象,保存模型时就会触发更改事件。

标签: backbone.js backbone-events


【解决方案1】:

收藏没有更新?

当你说“集合没有自动更新”我猜你的意思是“视图没有自动更新”

至少您使用 bindings 明确表示,视图不会响应模型更改:

// code simplified and no tested
var MyModel = Backbone.Model.extend({});

var MyModelView = 
  Backbone.View.extend({
    initialize: function(){
      this.model.on( "change:all", this.render, this );
    },
    render: function(){
      this.$el.html( "<h1>" + this.model.title + "</h1>" );
    }
  })

为每个模型明确声明 URL

正如@OlliM 所说,如果您的后端支持标准 CRUD API,则不需要这样做。您可以像这样在您的集合中声明 URL:

  • /app/collection

Backbone 将使用此 URL 作为 API:

  • (GET) /app/collection 获取整个集合
  • (GET) /app/collection/1 仅获取 id = 1 的模型
  • (PUT) /app/collection/1 使用 id = 1 更新模型
  • (POST)/app/collection 创建一个新模型
  • ...删除等等

【讨论】:

  • 我绑定了更改事件,但不知何故,它没有更新。我将不得不检查代码。谢谢。
  • 具体来说,使用urlRoot 属性而不是url 作为模型和主干将在调用savefetch 时自动使用正确的HTTP 方法和URL(如上定义)功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多