如何从集合中获取api返回的数据?
我有以下从api获取数据的集合:如何从集合中获取api返回的数据?,api,backbone.js,collections,model,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
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);
}
});
}
});
我不明白的是,当我记录参数时,我得到api数据,它有一个wieired结构:{0:child,1:object\*包含api数据*\,2:object}
但是当我记录数据时,我只得到子对象
我不理解此结构,我缺少什么,以及如何从中获取api数据?集合。fetch
正在调用您用3个参数传入的success函数(来自):
参数
是所有javascript函数中的一个特殊局部变量。看看这个
因此,记录参数
显示传递到success
函数的3个内容,而记录数据
只显示传递的第一个内容。尽管您的函数只有一个参数,但仍向其传递了三个参数
传递给success
的第一件事是主干集合本身。因此,您需要如何处理它取决于模板的外观。通常只将JSON传递给模板函数:.template($('#temp').html(),{data:data.toJSON()})
。然后在模板中,需要迭代这些JSON对象
<% _.each(data, function(item){ %>
<div><%= item.foo %></div>
<% }); %>
我的困惑是,为什么我从api收到的实际数据是第二个参数,而不是第一个参数?什么是名为子对象的对象?从您的解释来看,我似乎正确地使用了视图和集合。第二个参数是传递给其success
回调函数(Backbone.sync中定义的函数,而不是您的函数)的ajax
。通常,您不需要使用它,因为集合(第一个参数)已经用该数据重置了。可以尝试console.log(data.toJSON())
在您的success
函数中,这可能会帮助您更好地理解它。这应该打印出一个包含每个模型属性的JSON数组。在第一个参数中,我没有得到ajax数据,只有在第二个参数中,集合中没有ajax数据,这是不是出了什么问题代码>打印?第一个参数不是ajax数据,而是将ajax数据解析为的实例。
<% _.each(data, function(item){ %>
<div><%= item.foo %></div>
<% }); %>