如何将Backbone Collection转换为&符号?

时间:2015-10-13 21:29:11

标签: backbone.js ampersand.js ampersand-collection

我正在尝试将Backbone集合转换为Ampersand集合。这是我到目前为止所做的事情(我也在使用CommonJS从requirejs转换为webpack): 骨干收集:

define([ 'backbone', 'models/loneItem'], function( Backbone, LoneItem ) {
  return Backbone.Collection.extend({
    model: LoneItem,
    urlRoot: '/deeply/nested/path/',
    url: function() {
      return this.urlRoot + this.options.id + '/';
    },
    initialize: function(models, options) {
      this.options = options || {};
    },
    parse: function(response){
      return response.arrayAttribute;
    }
  });
});

然后在视图中我会像这样实例化它:

...
var myCollection = new GroupOfItems( [], { id: 'someID' } );
myCollection.fetch();

然后会产生对/deeply/nested/path/someID/的调用,在返回的数据中找到arrayAttribute并将其内容转换为一组LoneItem模型,可由myCollection访问。

对于Ampersand系列:

var Collection = require('ampersand-rest-collection');
var LoneItem = require('../models/LoneItem');

module.exports = Collection.extend({
  model: LoneItem,
  url: '/deeply/nested/path/',
  parse: function(response){
    return response.arrayAttribute;
  }
});

它的观点:

...
var myCollection = new GroupOfItems();
myCollection.fetchById('someID');

返回的数据如下所示

{
  "arrayAttribute": [
    {"id": "stringID1", "title": "Title A"},
    {"id": "stringID2", "title": "Title B"}
  ]
}

它会生成一个成功的XHR,但myCollection只会成为一个具有单个成员的集合对象,该成员具有LoneItem的默认道具。问题是返回的数据在响应的根级别上没有设置id属性吗?或者我缺少的Backbone和Ampersand集合实现之间有什么区别吗?

1 个答案:

答案 0 :(得分:1)

原来我不应该偏离原来的实施:

var Collection = require('ampersand-rest-collection');
var LoneItem = require('../models/LoneItem');

module.exports = Collection.extend({
  model: LoneItem,
  urlRoot: '/deeply/nested/path/',
  url: function() {
    return this.urlRoot + this.options.id + '/';
  },
  initialize: function(models, options) {
    this.options = options || {};
  },
  parse: function(response){
    return response.arrayAttribute;
  }
});

从视图:

var myCollection = new GroupOfItems([], {id: 'someID'});
myCollection.fetch();

换句话说,我所要做的只是将Backbone.Collection更改为Ampersand就是这样。

fetchById旨在通过单独的REST调用来获取集合的成员。