2013-08-03 2 views
0

Привет Я новичок в магистрали, и у меня есть страница, где я хочу отображать информацию о модели. При попытке доступа к нему на консоли она работает прекрасныйМагистраль: коллекция не правильно получает модель

Ex:

collection = new Poster.Colections.Posts() 
collection.fetch({reset: true}) 
post = collection.get(1) 

Выше работает отлично

Теперь, когда я пытаюсь сделать это в функции на routers странице, она возвращает назад неопределенные

posts_router.js

class Poster.Routers.Posts extends Backbone.Router 
    routes: 
     'posts':'index' 
     '':'index' 
     'posts/new': 'new' 
     'posts/:id': 'show' 

    initialize: -> 
     @collection = new Poster.Collections.Posts() 
     @collection.fetch({reset: true}) 


    index: -> 
     view = new Poster.Views.PostsIndex(collection: @collection) 
     $('#index_container').html(view.render().el) 

    show: (id) -> 
     post = @collection.get(id) 
     view = new Poster.Views.PostsShow(model: post) 
     $('#index_container').html(view.render().el) 

    new: -> 
     view = new Poster.Views.PostsNew(collection: @collection) 
     $('#index_container').html(view.render().el) 

Я действительно новичок в javascript и позвоночнике, и я потерян. Может кто-то помочь

+5

'fetch' является вызов AJAX, так что вы должны ждать ответа сервера до сбора будет иметь что-нибудь в нем. Обычно вы загружаете сборку с некоторыми данными на странице, если вы собираетесь использовать ее сразу. –

ответ

0

Как уже говорилось, fetch является асинхронным вызовом ajax. Поэтому вам нужно ждать результатов, а затем сделать что-то. backbone дает вам два варианта

Первый вариант: Вызов fetch с объектом обратного вызова

fetch принимает объект обратного вызова с success или error

collection = new Poster.Collections.Posts() 
collection.fetch 
    success: -> 
    console.log 'Collection fetched' 
    post = collection.get(1) 
    error: -> 
    console.error 'Unable to fetch collection' 

Второй вариант: Прислушайтесь к изменениям на коллекции

Когда модель i s добавлен в коллекцию (что делается при извлечении коллекции) а add событие инициируется

collection = new Poster.Collections.Posts.extend 
    initialize: -> 
    @on 'add', (model) => 
     console.log "model #{model} added" 

collection.fetch() 

List of built-in events

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