如何在一次调用中从sequelize-restful-extended中获取Backbone Collection

时间:2015-09-17 17:16:08

标签: rest backbone.js sequelize.js

我有一个名为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次。

1 个答案:

答案 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);
};