如何在一次调用中从 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);
};