1

我是 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不被调用?

谢谢!

4

3 回答 3

17

你必须拼写initialize正确=p

inititalize: -> # should be `initialize: ->`
  console.log "hello" # NOT CALLED
于 2012-09-24T17:48:28.780 回答
2

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

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

  // stuff

  initialize: function () {
    // overwrites previous
  }
})
于 2014-11-14T11:43:05.610 回答
0

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

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

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

HTH。

于 2012-09-24T17:37:23.207 回答