2012-09-24 3 views
0

Я новичок в Backbone.js. Я использую CoffeScript в приложении v0.9.2. Приложение работает «отлично», но метод просмотров не вызывается initialize(). События также не связаны должным образом. Я пытаюсь понять, почему это не так. Я использую другие (ручные) способы привязки событий к элементам, но этого не должно быть.Backbone 0.9.2 view initialize not a called

Приложение создается с этим:

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 правильно = р

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 
    } 
})