首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.js收集选项

Backbone.js收集选项
EN

Stack Overflow用户
提问于 2011-12-11 21:49:04
回答 2查看 37.4K关注 0票数 45

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

backbone.js视图通过将其传递给构造来接受选项: view( options ),但是集合在构造时需要一个模型列表: collection( models )。

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

缩写代码:

代码语言:javascript
复制
var Messages = Backbone.Collection.extend({
 model: Message,
   url: 'http://url/messages/' + id
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-12 00:51:59

@Paul的回答很好,但也值得注意的是,url属性可以是一个函数。在我看来(这只是我的意见,因为最终结果是一样的),如果你在initialize中设置id,并在函数中引用它,那么代码会更容易理解,如果更详细的话:

代码语言:javascript
复制
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。如果接口路径/messages/<id>实际上指的是一条消息,而不是一组消息,那么您只需要在集合中将url设置为/messages/,Backbone会自动为每个机型使用/messages/<id>

票数 109
EN

Stack Overflow用户

发布于 2011-12-11 22:01:36

按照声明url属性的方式,该值将在浏览器最初加载javascript文件时确定一次,而'id‘将是未定义的。

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

下面是一个例子

代码语言:javascript
复制
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();
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8464417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档