【问题标题】:Backbone.js: models not appearingBackbone.js:模型没有出现
【发布时间】:2012-02-12 10:50:13
【问题描述】:

我想显示一个简单的语言列表。

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 显示为空,尽管我检查了请求已进入并且语言已获取。我错过了什么吗?

谢谢。

【问题讨论】:

    标签: javascript backbone.js coffeescript


    【解决方案1】:

    fetch 调用是异步的:

    获取 collection.fetch([options])

    从服务器获取此集合的默认模型集,当它们到达时重置集合。选项哈希采用successerror 回调,它们将作为参数传递(collection, response)。当模型数据从服务器返回时,集合将重置。

    结果是您的console.log languages.modelslanguages.fetch() 调用从服务器返回任何内容之前被调用。

    所以你的render 应该看起来更像这样:

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

    这应该会让你在控制台上得到一些东西。

    initialize 中调用languages.fetch 并将@render 绑定到集合的reset 事件会更有意义;然后你可以在集合准备好后把东西放在页面上。

    此外,CoffeeScript 很少需要_.bindAll @。您应该改为使用=> 创建相关方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2012-08-08
    • 2012-02-12
    • 2013-11-20
    • 2018-04-27
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多