2

我有以下从 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 数据并且它有一个 wieired 结构:{0:child, 1:object\* contains the api data *\, 2:object}但是当我登录时,data我只得到child

我不明白这种结构,我缺少什么以及如何从中获取 api 数据?

4

1 回答 1

2

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

success(collection, resp, options);

arguments是所有 javascript 函数中的特殊局部变量。查看此文档

因此,日志记录显示传递给函数arguments的 3 件事,而日志记录只显示传入的第一件事。即使您的函数只有 1 个参数,仍然传递了三件事。successdata

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

 <% _.each(data, function(item){ %>
     <div><%= item.foo %></div>
 <% }); %>
于 2013-03-14T13:46:55.290 回答