Как преобразовать коллекцию 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.