我有以下集合从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数据?
答案 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>
<% }); %>