2012-09-24 77 views
0

我是Backbone.js的新手。我在v0.9.2应用程序上使用CoffeScript。该应用程序工作“很好”,但视图的initialize()方法没有被调用。事件也没有被正确绑定。我想弄明白为什么事实并非如此。我正在使用其他(手动)方式将事件绑定到元素,但事实并非如此。骨干0.9.2视图初始化不叫

的应用程序实例化本:

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

谢谢!

回答

16

你必须拼写正确initialize = P

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

好玩过@CaseyFoster。打的好。 +1 – EBarr

+0

哦,这个男孩这么尴尬!我很高兴我实际上从应用程序中复制/粘贴了代码并在问题中进行了编辑,否则这种情况从未出现过!因为我复制/粘贴到其他视图的第一个视图这个错误开始爬行进入我的应用程序...感叹...我发誓我一直在寻找这样的代码这么久... – mga

+1

哈哈哈,我太需要了Stackoverflow有我的拼写更正:) – nordhagen

0

我不写CoffeeScript的,但我看到initailized你的观点的一个实例的唯一地方是在路由器:

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

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

HTH。

+0

喜...感谢您的输入...我加在代码中的注释澄清路由器的指数被称为因为我参观'/'...如果创建视图这种方式不会创建视图的实例,那么执行该操作的正确方法是什么?我将我的应用程序放在这个例子上http://railscasts.com/episodes/323-backbone-on-rails-part-1 – mga

2

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

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

    // stuff 

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