我正在从RESTful API中获取JSON提要。我从服务器获得的JSON是一个具有2个不同对象数组的对象。我正在将JSON分解为几个不同的Backbone集合,它们工作正常。我的主干对象看起来像这样:
Document = Backbone.Model.extend({
defaults:{
did: '',
fields: []
}
});
Documents = Backbone.Collection.extend({
model: Document
});
对象本身很好,但我试图使用Handlebars.js进行模板化,并且发现必须使用对象,而不是数组。当我获取我的Documents对象并执行.toJSON()时,它似乎返回一个Array,而不是一个对象。所以我从服务器获得的原始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}
]
我怎样才能让脊椎骨回馈对象而不仅仅是一个包含对象内容的数组?
答案 0 :(得分:1)
backbone给你一个集合中的数组,因为这就是集合所拥有的 - 一组模型。
我不确定我是否清楚你正在尝试做什么,但看起来你真正需要的是让服务器收到一个看起来像这样的文件:
{
"Docs": docCollection.toJSON()
}
如果是这种情况,我只需覆盖Documents类的toJSON方法,就可以执行以下操作:
toJSON: function() {
return {"Docs": Backbone.Collections.prototype.toJSON.apply(self, arguments)};
}
至少在我理解的情况下,这几乎可以按你所说的去做。
答案 1 :(得分:0)
不幸的是,Backbone收藏品不能像把手一样好玩。由于它返回一个普通的JavaScript对象,你必须这样引用它。
尝试:
{{#each []}}
<tr>
<td>{{ this.title }}</td>
<td>{{ this.start }}</td>
<td>Invited</td>
<td>Confirmed</td>
<td>Edit</td>
</tr>
{{/each}}