从backbone.js集合中获取JSON对象

时间:2012-01-26 20:28:28

标签: backbone.js handlebars.js

我正在从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}
]

我怎样才能让脊椎骨回馈对象而不仅仅是一个包含对象内容的数组?

2 个答案:

答案 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}}