2012-01-26 120 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}}