2015-06-21 5 views
0

При извлечении коллекции мой ответ api имеет 10 объектов, но в результате коллекция Backbone имеет только одну модель с массивом атрибутов, содержащим 10 объектов ответа .... поставить это по-другому, выборка не создает модели из объектов в моем ответе ... и я не знаю почему.Коллекция backbone.js fetch не задает объекты ответа как модели

определение

Модель:

MyApp.Item = Backbone.Model.extend({ 
    initialize: function(){ 

    } 
}); 

определение Коллекция:

MyApp.ItemCollection = Backbone.Collection.extend({ 
    model: MyApp.Item, 
    url: '/api/v1/item/', 
    parse : function(response){ 
     //api returns objects in the content attribute of response, need to override parse 
     return response.content; 
    } 
}); 

Calling Fetch:

var myCollection = new MyApp.ItemCollection(); 

myCollection.fetch({ 
    traditional: true, 
    data: { //url params for api call 
     u_id: currentUser.id, 
     order: 'sort_date:desc', 
     start: 0, 
     num_items: 10, 
     format:'json'} 
    }); 

Результаты:

console.log (вос sponse.content);

4571221007823F95BAAFB2BDF81111XX: Object 
0124207763051005AAF59694458EBFXX: Object 
3324207755431003B589CEF237DBE1XX: Object 
3470000061641005BFB5D9983156E0XX: Object 
3515553061641005A02884677F5624XX: Object 
3526033426761006AFEA9852B0DDB5XX: Object 
21431252714010079E4D8413429DB0XX: Object 
26570547220410068F60D1B07D2E08XX: Object 
37557124663710079DDC81EE855981XX: Object 
0152243312031007957B94F5073B69XX: Object 

//api successfully returns an array of objects, with GUID as key 

console.log (MyCollection);

r {length: 1, models: Array[1], _byId: Object} 

//why only one model? why not 10? 

console.log (myCollection.models [0] .attributes);

4571221007823F95BAAFB2BDF81111XX: Object 
0124207763051005AAF59694458EBFXX: Object 
3324207755431003B589CEF237DBE1XX: Object 
3470000061641005BFB5D9983156E0XX: Object 
3515553061641005A02884677F5624XX: Object 
3526033426761006AFEA9852B0DDB5XX: Object 
21431252714010079E4D8413429DB0XX: Object 
26570547220410068F60D1B07D2E08XX: Object 
37557124663710079DDC81EE855981XX: Object 
0152243312031007957B94F5073B69XX: Object 
__proto__: Object 

//there they are...but why? 

Как я могу изменить выборки, чтобы получить эти объекты, добавленные в виде отдельных моделей в MyCollection?

ответ

1

Ответ должен быть массивом. Каждый элемент массива превращается в модель. Ваш ответ - это объект.

Обновите свой метод разбора, чтобы вытащить значения (в виде массива) из ответа в массив, и он будет работать.

MyApp.ItemCollection = Backbone.Collection.extend({ 
    model: MyApp.Item, 
    url: '/api/v1/item/', 
    parse : function(response){ 
     //api returns objects in the content attribute of response, need to override parse 
     return _.map(response.content, function(model, id) { 
      model.id = id; 
      return model; 
     }); 
    } 
}); 
+0

Кори, вы джентльмен и ученый. Это сработало. Любые указания относительно того, как устанавливать атрибуты идентификаторов моделей для идентификаторов GUID в ответе? – byron

+0

Да, у меня было ощущение, что вам нужно это сделать. 1 сек, lemme редактировать сообщение –

+1

Обновлен ответ, который должен работать сейчас –

Смежные вопросы