Backbone.js: модели не отображаются - PullRequest
0 голосов
/ 12 февраля 2012

Я хочу отобразить простой список языков.

class Language extends Backbone.Model

    defaults:
        id: 1
        language: 'N/A'

class LanguageList extends Backbone.Collection

    model: Language
    url: '/languages'

languages = new LanguageList

class LanguageListView extends Backbone.View

    el: $ '#here'

    initialize: ->
        _.bindAll @
        @render()

    render: ->
        languages.fetch()
        console.log languages.models

list_view = new LanguageListView

languages.models кажется пустым, хотя я проверил, что пришел запрос и были выбраны языки.Я что-то упустил?

Спасибо.

1 Ответ

1 голос
/ 12 февраля 2012

Вызов fetch является асинхронным:

выборка collection.fetch([options])

Получить набор моделей по умолчанию для этой коллекции с сервера, сбрасывая коллекцию по прибытии. Хэш параметров принимает обратные вызовы success и error, которые будут переданы (collection, response) в качестве аргументов. Когда данные модели возвращаются с сервера, коллекция сбрасывается.

В результате ваш console.log languages.models вызывается до того, как вызов languages.fetch() получил что-нибудь от сервера.

Так что ваш render должен выглядеть примерно так:

render: ->
    languages.fetch
        success: -> console.log languages.models
    @ # Render should always return @

Это должно дать вам что-то на консоли.

Было бы более разумно вызвать languages.fetch в initialize и связать @render с событием reset коллекции; тогда вы можете поместить вещи на страницу, когда коллекция будет готова.

Кроме того, _.bindAll @ редко требуется с CoffeeScript. Вместо этого вы должны создать соответствующие методы с =>.

...