Backbone 0.9.2视图初始化未被调用

时间:2012-09-24 17:24:36

标签: backbone.js coffeescript

我是Backbone.js的新手。我在v0.9.2应用程序上使用CoffeScript。该应用程序工作“很好”,但视图的initialize()方法未被调用。事件也没有正确绑定。我试图找出原因并非如此。我正在使用其他(手动)方法将事件绑定到元素,但情况并非如此。

应用程序实例化:

window.Site =
  Models: {}
  Collections: {}
  Views: {}
  Routers: {}
  init: -> 
    new Site.Routers.MyRouter()
    Backbone.history.start()

$(document).ready ->
  Site.init()

路由器:

class Site.Routers.MyRouter extends Backbone.Router
    routes:
        '': 'index'

    initialize: ->
        # some code here (this IS being called)

    index: =>
        # this is also being called since I am trying mysite.com/
        view = new Site.Views.MyView()
        $('#someId').html(view.render().el)

观点:

class Site.Views.MyView extends Backbone.View

    template: JST['views/index']

    events:
        'click .someElement': 'someMethod'

    inititalize: ->
        console.log "hello" # NOT CALLED
        _.bindAll @
        @

    render: =>
        # draw stuff (this works)
        @

视图被绘制得很好。为什么initialize没有被调用?

谢谢!

3 个答案:

答案 0 :(得分:16)

你必须正确拼写initialize = p

inititalize: -> # should be `initialize: ->`
  console.log "hello" # NOT CALLED

答案 1 :(得分:2)

对于未来的读者,还要检查您没有两个初始化函数。

Backbone.View.extend({
  initialize: function () {
    // not called 
  },

  // stuff

  initialize: function () {
    // overwrites previous
  }
})

答案 2 :(得分:0)

我不写CoffeeScript,但我看到你的视图实例的唯一地方是路由器:

index: =>
     view = new Site.Views.MyView()

我怀疑路由器的索引没有被调用,因此你的视图的初始化没有被调用。扩展视图不会创建视图的实例,而是创建视图的自定义定义。

HTH。