2012-04-07 25 views
2

我有一個集合,而collection.models返回一個模型數組。但是,當我撥打collection.get(someId)(並且此ID是collection.models陣列中的模型的ID)時,我得到undefined。看着collection._byId,它看起來像一個空的物體。如何填充Backbone.js集合的_byId數組,以便我可以使用`get`?

如何正確填充_byId,以便我可以使用get?或者,也許我在初始化我的集合時出錯了,這就是爲什麼_byId是空的。

+0

你是如何初始化你的收藏? – kinakuta 2012-04-07 03:30:26

+0

我關注了初始化部分的[thinkbot book](http://ui.thoughtbot.com/assets/backbone-js-on-rails-thoughtbot-ebook-august-2011-sample.html)。我使用json,如[this](https://gist.github.com/2325408)(修剪大部分屬性以簡潔)。創建它時,我將它傳遞給控制器​​類:'controller = new MyController(jsonYouSeeAbove)'。也許JSON是錯誤的? – 2012-04-07 05:10:08

+0

我看到我的問題。我使用的'to_json'方法不返回正確的json序列。我應該在要點的哈希中返回一個哈希值,如「model」的值。 – 2012-04-07 05:14:13

回答

0

因爲我在Rails中使用這個,Rails生成的默認json與Backbone不兼容。我不知道爲什麼我在嘗試學習Backbone時沒有看到它。無論如何,你既可以:

  1. 變更軌道的方式產生了JSON
  2. Change the way your Backbone app reads the JSON
3

我有點晚了,但希望這對其他人仍然有用。

Collection._byId只是一個普通的js散列對象。這真的沒有什麼奇特的。如果你想讓Collection.get工作,只需將所有模型添加到_byId哈希中。

裏面收集的範圍:

var someId = '123'; // any id will do 

this._byId[someId] = someModel; // someModel.id = '123' 

console.log(!!this.get(someId)); // should return true 
0

聽起來就像是OP有一個稍微不同的問題,但我經歷了類似的問題,我想我會張貼我工作。

與原始問題一樣,collection.models包含正確的模型,但在我的情況下,_byId哈希包含模型的非空的cid版本。儘管如此,_byId沒有包含正常編號的模型(通常有兩個版本 - id one和cid之一),所以我無法使用collection.get(id)來檢索它。當我讀到cid時,我的問題變得更清晰了。從文檔:

當模型尚未保存到服務器,並且還沒有最終的真實ID,但已經需要在UI中可見時,客戶端ID很方便。

我不認爲它與等待服務器作爲我cid模型的問題和collection.model有正確的ID。不過通過{ wait : true }作爲collection.create中的一個選項爲我解決了這個問題。

相關問題