2013-11-26 3 views
0

Я новичок в магистрали, и я пытаюсь установить коллекцию моделей с данными, загруженными из json-файла. Но он не будет установлен. В чем проблема? У кого есть идея? Когда я получаю коллекции, кажется, что он пуст.Настройка базовой модели через файл JSON

JSON

{ 
"items": [ 
    { 
     "id": "0", 
     "media": "", 
     "desc": "lorem", 
     "img": "ipsum" 
    }, 
    { 
     "id": "1", 
     "media": "", 
     "desc": "lorem", 
     "img": "ipsum" 
    } 
] 

}

Javscript

var Card = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      items: { 
       id: "lorem", 
       media: "lorem", 
       desc:"lorem", 
       img: "lorem" 
      } 
     }; 
    }, 

    clear: function() { 
     this.destroy(); 
    } 
}); 

var CardCollection = Backbone.Collection.extend({ 
    model: Card, 
    url: "file.json", 
    parse: function (response) { 
     for (var i = 0; i<response.items.length; i++) { 

     } 
    } 
}); 

var cards = new CardCollection(); 
cards.fetch(); 
console.log(cards) 

ответ

0

fetch асинхронный, он возвращается непосредственно перед загрузкой данных.

Попробуйте

var cards = new CardCollection(); 
cards.fetch({ 
    success: function() { 
     console.log(cards); 
    } 
}); 
+0

Не уверен, что это правильный ответ для принятия. Pls подтверждает принятый ответ. – vijay

0

Метод CardCollection.parse вызывается с ответом. Если для ответа с сервера не требуется преобразование, вы можете удалить метод анализа из CardCollection. Реализация по умолчанию - pass thru, и ответ используется как есть.

В основном parse должен возвращать массив для добавления в коллекцию. Текущая реализация ничего не делает. возврат отсутствует для реализации.

+0

Спасибо! Так что я должен был сделать это в основном, чтобы добавить это. parse: function (response) { for (var i = 0; i user2952238

+0

Нет. Просто удалите для цикла и 'return response.items' из метода, как я объяснил в своем ответе. – sachinjain024

+0

Спасибо! работает отлично. – user2952238

0

Просто верните что-то из своего метода разбора, и вам хорошо идти. Ожидается, что он вернет массив объектов, и каждый объект будет вписываться в вашу модель. Итак, наконец, у вас будет коллекция моделей, соответствующих массиву объектов, возвращаемых из метода parse.

Попробуйте

var CardCollection = Backbone.Collection.extend({ 
    model: Card, 
    url: "file.json", 
    parse: function (response) { 
    return response.items; 
    } 
}); 

Прочитайте эту Documentation on Parse Method для получения дополнительной информации.

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