Как преобразовать коллекцию Backbone в Ampersand?

Я пытаюсь преобразовать коллекцию Backbone в коллекцию Ampersand. Вот что у меня есть (я также в процессе конвертации из requirejs в веб-пакет, используя CommonJS): Коллекция Backbone:

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 ответ

Оказывается, мне не следовало уходить так далеко от моей первоначальной реализации:

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.

Другие вопросы по тегам