我是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
没有被调用?
谢谢!
答案 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。