Backbone.js 主干收集-模型更新

Backbone.js 主干收集-模型更新,backbone.js,backbone-events,Backbone.js,Backbone Events,我将模型列表从服务器检索到集合中。当用户对特定模型感兴趣时,我会根据id将其发送到该模型的查看器 现在,假设一个用户需要在视图中编辑该模型-例如:他更新了他的名字。我设置模型的url,更新名称并调用save。它调用后端(在我的例子中是Jersey)并保存它。但是,集合仍不会自动更新 为什么集合不能绑定到模型中的每个更改并自行更新 保存作为集合一部分的模型的正确方法是什么?在模型上调用save(通过设置其url),然后从其父集合中删除,然后使用silent:true再次添加它是否正确 谢谢。收藏没

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

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

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

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

谢谢。

收藏没有更新吗? 当你说“收藏不会自动更新”时,我猜你的意思是“视图不会自动更新”

视图不会响应模型更改,至少您可以使用绑定明确地这样说:

//代码简化,无需测试
var MyModel=Backbone.Model.extend({});
var MyModelView=
Backbone.View.extend({
初始化:函数(){
this.model.on(“change:all”,this.render,this);
},
render:function(){
this.el.html(“+this.model.title+”);
}
})
为每个模型显式声明URL 正如@OlliM所说,如果您的后端支持标准CRUDAPI,那么这应该是不必要的。您可以在集合中声明URL,如下所示:

  • /app/collection
主干网将使用此URL作为API:

  • (获取)
    /app/collection
    获取整个集合
  • (获取)
    /app/collection/1
    仅获取id=1的模型
  • (PUT)
    /app/collection/1
    使用id=1更新模型
  • (POST)
    /app/collection
    创建新模型
  • 。。。删除等等
收藏是否未更新? 当你说“收藏不会自动更新”时,我猜你的意思是“视图不会自动更新”

视图不会响应模型更改,至少您可以使用绑定明确地这样说:

//代码简化,无需测试
var MyModel=Backbone.Model.extend({});
var MyModelView=
Backbone.View.extend({
初始化:函数(){
this.model.on(“change:all”,this.render,this);
},
render:function(){
this.el.html(“+this.model.title+”);
}
})
为每个模型显式声明URL 正如@OlliM所说,如果您的后端支持标准CRUDAPI,那么这应该是不必要的。您可以在集合中声明URL,如下所示:

  • /app/collection
主干网将使用此URL作为API:

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

您不必设置url,模型从它所属的集合中获取其url(假设您遵循推荐的api格式)。您所说的“收藏不会自动更新”是什么意思?只要您使用的是属于集合的模型对象,则在保存模型时将触发更改事件。您不必设置url,模型将从其所属的集合获取其url(假设您遵循建议的api格式)。您所说的“收藏不会自动更新”是什么意思?只要您使用的是属于集合的模型对象,保存模型时就会触发更改事件。我已经绑定了更改事件,但不知怎的,它没有更新。我得检查一下密码。谢谢。要特别说明,请对模型使用
urlRoot
属性而不是
url
,主干将在调用
save
fetch
函数时自动使用正确的HTTP方法和url(如上定义)。我对更改事件进行了绑定,但不知怎的,它没有更新。我得检查一下密码。谢谢。要特别说明,请对模型使用
urlRoot
属性而不是
url
,主干将在调用
save
fetch
函数时自动使用正确的HTTP方法和url(如上定义)
// 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>" );
    }
  })