Backbone JS w / Coffeescript基本GET

时间:2013-04-01 16:11:08

标签: json backbone.js coffeescript

我正在学习CoffeeScript和Backbone JS。我想加载一件装备。是的,我知道我不需要Backbone JS - 但它帮助我学习我是否从基础开始。一旦页面加载,我希望它从服务器中获取一些JSON,并将其显示在页面上。

到目前为止,这是我的咖啡因:

jQuery ->
    class Equipment extends Backbone.Model
        defaults:
            title:''
            desc:''
        url:'/getData'

    class ItemView extends Backbone.View
        tagName: 'div'

        initialize: ->
            _.bindAll @, 'render'

        render: ->  
            $(@el).html """
                <h1>#{@model.get 'title'}</h2>
                <p>#{@model.get 'desc'}</p>
            """
            @

    class AppRouter extends Backbone.Router.extend
        routes:
            '':'getData'

        getData: ->
            @equipment = new @Equipment()
            @equipmentView = new @ItemView
                model: @equipment
            @equipment.fetch()
            $('div').html @equipmentView.render().el

    appRouter = new AppRouter

    Backbone.history.start()

我觉得我已经准备好了所有部分,并且没有错误(无论是在编译还是运行页面)。

我期望从服务器回来的基本JSON只是一个回应这个的PHP页面:

{
    "title": "title",
    "desc": "description"
}

我错过了什么?

2 个答案:

答案 0 :(得分:0)

@ equipment.fetch()是否会触发HTTP请求?

根据我的理解,您必须设置id:@equipment = new @Equipment(id:123),这将触发“/ getData / 123”请求。

或指定抓取中的网址:@equipment.fetch(url:"/getData")以加载

但是视图仍然是空的,因为在执行View render()时尚未加载数据。当模型发生变化时,Backbone不会自动更新视图(与EmberJS一样)。

@listenTo(@model, "change", @render)添加到initialize方法,以便在模型更改时重新渲染。

我找到了一本很好的指南/教程 http://adamjspooner.github.com/coffeescript-meet-backbonejs/

答案 1 :(得分:0)

你必须告诉Backbone路由你的初始URL(''),如下所示:

Backbone.history.start pushState: true

你也应该传递一个id(我认为Backbone将在你的情况下请求/getData/undefined并在旁注上我认为你应该使用咖啡的胖箭而不是bindAll(它是众多伟大的人之一关于coffeescript的事情,但是你应该摆脱一些@因为它们不再引用窗口...