2012-01-26 168 views
1

我從RESTful API創建JSON源。我從服務器獲得的JSON是一個包含2個不同數組的對象的對象。我將這個JSON分解爲幾個不同的Backbone集合,它們工作正常。我的骨幹物體看起來是這樣的:從backbone.js集合中獲取JSON對象

Document = Backbone.Model.extend({ 
    defaults:{ 
     did: '', 
     fields: [] 
    } 
}); 

Documents = Backbone.Collection.extend({ 
    model: Document 
}); 

對象本身都很好,但我想使用Handlebars.js用於模板和已經找到了必須採取的對象,而不是一個數組。當我使用我的Documents對象並執行.toJSON()時,它似乎返回一個數組,而不是對象。所以生JSON我從服務器獲取的樣子:

{ 
"Docs":[ 
    {"Fields":[{"ID":59,"VAL":""},{"ID":157,"VAL":""}],"Id":4143}, 
    {"Fields":[{"ID":59,"VAL":""},{"ID":69,"VAL":""}],"Id":4142} 
] 
} 

但是,一旦它被壓入骨幹集合,然後拉背出車把切換時,它看起來像這樣:

[ 
    {"Fields":[{"ID":59,"VAL":""},{"ID":157,"VAL":""}],"Id":4143}, 
    {"Fields":[{"ID":59,"VAL":""},{"ID":69,"VAL":""}],"Id":4142} 
] 

如何我可以得到骨幹,讓我回到對象而不僅僅是一個數組與對象的內容?

回答

1

骨幹爲您提供了一個集合中的數組,因爲這是集合所持有的 - 一組模型。

我不知道我是清楚的,正是你正在嘗試做的,但它看起來像你真正需要的是有服務器接收文件,看起來像:

{ 
    "Docs": docCollection.toJSON() 
} 

如果是這樣的話,我只是覆蓋在你的文檔類的toJSON方法做這樣的事情:

toJSON: function() { 
    return {"Docs": Backbone.Collections.prototype.toJSON.apply(self, arguments)}; 
} 

這應該差不多你說你想要的,至少據我所知。

+0

這是在正確的軌道上。以下爲我工作。 \t \t文檔= Backbone.Collection.extend({ \t \t toModdedJSON:函數(){ \t \t \t返回{ 「文檔」:this.toJSON()}; \t \t} \t}); 從重載方法中調用toJSON導致遞歸問題。 – BrianB

0

不幸的是,Backbone集合並不像打開車把那樣好玩。既然它返回一個普通的JavaScript對象,你必須按照這樣的方式引用它。

嘗試:

{{#each []}} 
    <tr> 
    <td>{{ this.title }}</td> 
    <td>{{ this.start }}</td> 
    <td>Invited</td> 
    <td>Confirmed</td> 
    <td>Edit</td> 
    </tr> 
{{/each}}