我有以下 Backbone.js 集合:
var Tags = Backbone.Collection.extend({
url: "/api/v1/tags/"
}),
如何更新集合中的一个模型,以便它发布到 /api/v1/tags/id 并保存该模型的数据。
因此,如果我在集合中更改 id 为 2 的模型名称,它应该使用以下数据 PUT 到 /api/v1/tags/2:名称:新名称 id:2
我有以下 Backbone.js 集合:
var Tags = Backbone.Collection.extend({
url: "/api/v1/tags/"
}),
如何更新集合中的一个模型,以便它发布到 /api/v1/tags/id 并保存该模型的数据。
因此,如果我在集合中更改 id 为 2 的模型名称,它应该使用以下数据 PUT 到 /api/v1/tags/2:名称:新名称 id:2
我最近还想更新集合中的特定模型。问题是,如果我确实使用model.save
它并没有更新集合。目标是更改集合中的模型,在服务器上更改它,相应地更新集合而不使用该sync
方法。例如,我有我的变量collection
,我想用id = 2
.
所以第一件事,我将创建一个实例模型,如下所示:
var model = collection.get(2)
然后我将更新这个特定模型的属性:model.set({name: 'new name'})
然后我将它保存到服务器:model.save({}, {url:'/api/v1/tags/'+model.get('id')})
然后我们必须根据更改更新集合:collection.set({model},{remove: false})
set
方法 - 这是一个使用您传入参数的模型列表对集合进行“智能”更新。
remove: false
参数 - 这是一个集合删除集合中现有模型的限制。更多在这里。
您可能会错过的第一件事是,在相应的标记模型中,您需要设置“urlRoot”以匹配集合的“url”。否则它根本不知道集合:
var Tag = Backbone.Model.extend({
urlRoot: "/api/v1/tags"
});
var Tags = Backbone.Collection.Extend({
model: Tag,
url: "/api/v1/tags"
});
如果您想单独保存标签,这很有用:
var tag = collection.get(2);
tag.set({key: "something"});
tag.save(); // model.save works because you set "urlRoot"
在集合上,如果 id 不为空,“create()”也是“update()”。这并不令人困惑。:) 因此,这几乎等同于前面的示例:
collection.create({id: 2; key: "something"});
这将使用 id=2 更新现有标签,然后触发 PUT。
这是一个古老的问题;回答是因为我正在寻找相同的答案——您可能早就解决了这个问题并继续前进。:)
您可以将变量传递给save
方法。它接受 jQueryajax
方法使用的所有选项(除非你重写Backbone.Sync
)
您可以执行以下操作:
model.save( { name:'new name' } )
;
id
andPUT
方法将由 Backbone 自动为您添加。