如何从集合中获取api返回的数据?

时间:2013-03-14 13:41:09

标签: api backbone.js collections model

我有以下集合从api获取数据:

var Data = Backbone.Collection.extend({
    url: '/* api url - working */',

    sync: function(method, model, options) {
        options.timeout = 10000;
        options.dataType = "jsonp";
        return Backbone.sync(method, model, options);
    }
});

我想在视图中显示它:

var MyView = Backbone.View.extend({
    el : '.myview',
    render : function () {
        var data = new Data();
        var that = this;

        data.fetch({
            success : function (data) {
                console.log(arguments);
                console.log(data);

                var template = _.template( $('#temp').html(), {data: data.models} );
                that.$el.html(template);
            }
        });
    }
});

我不明白的是,当我记录arguments时,我得到了api数据并且它有一个不合理的结构:{0:child, 1:object\* contains the api data *\, 2:object}但是当我记录data时,我只得到child {1}}

我不明白这个结构,我错过了什么以及如何从中获取api数据?

1 个答案:

答案 0 :(得分:2)

Collection.fetch正在调用您传入的3个参数(来自Backbone source)的成功函数:

success(collection, resp, options);

arguments是所有javascript函数中的特殊局部变量。看看这个documentation

因此,日志记录arguments显示传递到success函数的3个内容,而日志记录data仅显示传入的第一个内容。即使您的函数只有1个参数,仍有三件事情传递给它。

传递给success的第一件事是Backbone Collection本身。那么,你需要做什么取决于你的模板是什么样的。通常只将JSON传递给模板函数:_.template( $('#temp').html(), {data: data.toJSON()} )。然后在模板中,您需要迭代这些JSON对象。

 <% _.each(data, function(item){ %>
     <div><%= item.foo %></div>
 <% }); %>