Backbone Js - 解析数据问题

时间:2013-08-25 17:12:56

标签: javascript jquery json backbone.js

我正在尝试将数据解析为json文件中的集合视图,该文件中包含每组数据的数字键。 JSON看起来像这样:

{
    "0": {
        "artifact_id": "36",
        "timestamp": "2013-08-20 11:59:00",
        "modified": "2013-08-20 11:59:00",
        "text": "Why did the last one duplicate? I don't think I clicked it twice...",
        "author_desc": "",
        "object_type": "artifact",
        "comments": []
    },
    "1": {
        "artifact_id": "35",
        "timestamp": "2013-08-20 11:57:51",
        "modified": "2013-08-20 11:57:51",
        "text": "This is a new artifact for a new day.",
        "author_desc": "",
        "object_type": "artifact",
        "comments": []
    },
    "2": {
        "artifact_id": "34",
        "timestamp": "2013-08-20 11:57:50",
        "modified": "2013-08-20 11:57:50",
        "text": "This is a new artifact for a new day.",
        "author_desc": "",
        "object_type": "artifact",
        "comments": []
    }
}

如何编写模型解析以将每个条目(0,1,2 ......等)作为数据中的每个模型?

这是我的收藏,下面是Casey的建议添加,但它似乎没有运行解析方法:

var FriendCollection = Backbone.Collection.extend({
    model: FriendModel,
    parse: function(data) {
        console.log('running parse');
        return _.map(data, _.identity);
    }
});
var friendCollection = new FriendCollection();
friendCollection.reset(friendjson);

2 个答案:

答案 0 :(得分:2)

Collection#reset没有致电parse,也无法拨打parse。您有几个选择:

  1. 手动将friendjson转换为数组,并为该数组提供reset
  2. 根本不要reset,只需将friendjson交给集合的构造函数并添加{parse: true} option
  3. 如果您添加reset选项,则将您的收藏集parse替换为您自己的版本{parse: true}
  4. 1 应该非常明显。

    2 会是这样的:

    var friendCollection = new FriendCollection(friendjson, { parse: true });
    

    演示:http://jsfiddle.net/ambiguous/dbM82/

    3 看起来像这样:

    var FriendCollection = Backbone.Collection.extend({
        //...
        reset: function(models, options) {
            if(options && options.parse) {
                delete options.parse;
                models = this.parse(models);
            }
            return Backbone.Collection.prototype.reset.call(this, models, options);
        }
    });
    
    var friendCollection = new FriendCollection();
    friendCollection.reset(friendjson, { parse: true });
    

    演示:http://jsfiddle.net/ambiguous/Rs8es/

答案 1 :(得分:0)

使用Collection#parse方法。

var MyCollection = Backbone.Collection.extend({
  parse: function (data) {
    return _.map(data, _.identity);
  }
});