如何在一次调用中从 sequelize-restful-extended 获取 Backbone Collection
How to fetch a Backbone Collection from sequelize-restful-extended in one call
我有一个名为 Instance 的模型,它运行良好。
define([], function(){
return Backbone.Model.extend({
urlRoot:'/api/Instances',
parse:function(content){
return content.data;
}
});
});
我在这里休息
http://localhost:3000/api/Instances/1
returns这个
{"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}}
因此我的模型中有 parse 函数。到目前为止一切都很好。
如果我打电话
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},
....
我的 collection 代码就是这个
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个,我刚得到"undefined=null
"212次
我可以看到三个选项,其中两个涉及自定义使用 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);
};
我有一个名为 Instance 的模型,它运行良好。
define([], function(){
return Backbone.Model.extend({
urlRoot:'/api/Instances',
parse:function(content){
return content.data;
}
});
});
我在这里休息
http://localhost:3000/api/Instances/1
returns这个
{"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}}
因此我的模型中有 parse 函数。到目前为止一切都很好。
如果我打电话
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},
....
我的 collection 代码就是这个
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个,我刚得到"undefined=null
"212次
我可以看到三个选项,其中两个涉及自定义使用 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);
};