Availability of UI elements in Marionette.View

backbone.js, binding, marionette, user-interface, view

Solution

Attaching a view to an existing element is the exception. The normal view lifecycle involves calling `render`, and without doing that there would be nothing for the UI elements to bind to.

Just call `this.bindUIElements()` in your `initialize` method when you need to attach a view to an existing element.

Problem

I'd just like to understand the decisions behind Backbone.Marionette's view regarding UI elements. When instantiating a Marionette.View on an existing DOM element, like this: ``` view = new Marionette.ItemView({ el: "#element", ui : { whatever : "#whatever" } }); ``` I am able to access `view.$el`, the jquery selector inside `view.initialize`, so far so good. However, when I try to access `view.ui.whatever`, I only have access to the selector, ie the string "#whatever" instead of the actual `$("#whatever")` jquery selector. The reason for this is because `Marionette.View.bindUIElements()` is only called on `render` and not before `initialize`. I would like to know if you think this behaviour is logic and why? I am only asking in the case of attaching of the view to an existing `el`, if the view is created with a template, I do understand why the binding is in `render()`.

Original source