mga
mga

Reputation: 1970

Backbone 0.9.2 view initialize not being called

I am new to Backbone.js. I am using CoffeScript on a v0.9.2 app. The app works "fine" but the initialize() method of the views is not being called. Events are not being properly binded either. I am trying to figure out why this is not the case. I am using other (manual) ways to bind events to elements but that should not be the case.

The app is instantiated with this:

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

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

The router:

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)

The view:

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

The view gets drawn fine. Why is initialize not being called?

Thanks!

Upvotes: 1

Views: 2522

Answers (3)

AJcodez
AJcodez

Reputation: 34156

For future readers, also check you don't have two initialize functions.

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

  // stuff

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

Upvotes: 2

Casey Foster
Casey Foster

Reputation: 6010

You have to spell initialize correctly =p

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

Upvotes: 17

EBarr
EBarr

Reputation: 12026

I don't write CoffeeScript, but the only place I see an instance of your view initailized is in the router:

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

I suspect the router's index is not being called and as a result your view's initialize isn't being called. Extending a view doesn't create an instance of the view, rather it creates a customized definition of a view.

HTH.

Upvotes: 0

Related Questions