簡體   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