繁体   English   中英

Backbone.js集合选项

[英]Backbone.js collection options

我使用Backbone.js编写了一个模型/视图/集合。 我的集合使用fetch方法从远程服务器加载模型。 此集合所需的URL需要一个id:messages / {id}。 但我发现没有干净的方法将选项传递给Collection。

backbone.js视图通过在构造上传递它来接受选项:view([options]),但是集合需要构建时的模型列表:collection([models])。

将参数/选项传递给此集合的“最干净”方法是什么?

缩短的代码:

var Messages = Backbone.Collection.extend({
 model: Message,
   url: 'http://url/messages/' + id
});

@Paul的答案很好,但值得注意的是url属性可以是一个函数。 在我看来(并且只是意见,因为最终结果是相同的),如果你在initialize设置id并在initialize中引用它,那么代码会更加清晰,如果更详细的话:

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.id = options.id;
  },
  url: function() {
    return '/messages/' + this.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

但是,为了确保 - 你不会把这里的id与模型id混淆,是吗? @Paul的答案和上面的代码假设您有多个Messages集合,每个集合都有自己的id。 如果API路径/messages/<id>实际上是指消息 ,而不是一组消息,那么您只需要在集合中将url设置为/messages/ ,Backbone将自动使用/messages/<id>每个型号。

您声明了url属性的方式,当浏览器最初加载javascript文件时,将确定一次值,并且'id'将是未定义的。

Backbone.Collection接受选项作为其构造函数中的第二个参数,因此您可以将id值作为选项传递,然后在集合的initialize函数中设置url值。

这是一个例子

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.url = 'http://url/messages/' + options.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM