2015-10-13 5 views
0

Я пытаюсь преобразовать базовую коллекцию в амперсанд. Вот то, что я до сих пор (я также преобразование из requirejs в WebPack с использованием 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.

Для коллекции амперсанд:

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 для Амперсанда, и все.

fetchById предназначен для получения членства в коллекции с помощью отдельного вызова REST.