我有一个名为Instance的模型可以正常工作。
define([], function(){
return Backbone.Model.extend({
urlRoot:'/api/Instances',
parse:function(content){
return content.data;
}
});
});
我的REST在这里
http://localhost:3000/api/Instances/1
返回此
{"status":"success","data":{"id":1,"name":"bangladesh","write":null,"read":null,"createdAt":"2015-09-01T23:03:16.000Z","updatedAt":"2015-09-01T23:03:16.000Z","UserId":1}}
因此我的模型中的解析函数。到目前为止都很好。
如果我只是打电话
http://localhost:3000/api/Instances
然后我得到了所有记录的块,
{"status":"success","count":212,"data":[
{"id":1,"name":"bangladesh","write":null,"read":null,"createdAt":"2015-09-01T23:03:16.000Z","updatedAt":"2015-09-01T23:03:16.000Z","UserId":1},
{"id":2,"name":"abqride","write":null,"read":null,"createdAt":"2015-09-01T23:03:58.000Z","updatedAt":"2015-09-01T23:03:58.000Z","UserId":1},
....
我的收藏代码就是这个
define(['models/instance.js'], function(Model){
return Backbone.Collection.extend({
url:'/api/Instances',
model:Model,
parse:function(content){
return content.data;
}
})
});
上面的Collection代码将创建212个模型。我已经检查了模型中的初始化函数,只是为了查看是否使用正确的数据调用了OK,它就是。
但是在我去的时候看代码
this.collection.each(function(model) {
console.log("model id="+model.get("id")+" count="+count++);
out+=model.get("id")+"="+model.get("name")+"<br>";
});
这些模型中没有任何内容,但其中有212个,我只是得到了#34; undefined = null
&#34; 212次。
答案 0 :(得分:2)
我可以看到三个选项,其中两个涉及自定义Backbone的使用:1。手动调用collection.sync
然后执行自定义代码,2。在初始collection.fetch()
中传递自定义选项在模型parse()
方法中寻找它。
然而,这两个选项并不能解决问题,因为问题出在初始响应级别。要对您的数据应用响应级别过滤器,请在启动应用程序之前尝试覆盖Backbone.ajax()
:
Backbone.ajax = function () {
var settings = arguments[1] || arguments[0]; // jQuery.ajax(url[, settings])
var success = settings.success;
settings.success = function (data, status, xhr) {
if (success) { success(data.data, status, xhr); }
};
return Backbone.$.ajax.apply(Backbone.$, arguments);
};