What is the difference between $el and el in Backbone.js views?

Javascriptbackbone.jsBackbone Views

Javascript Problem Overview


Can you please tell the difference between $el and el in Backbone.js views?

Javascript Solutions


Solution 1 - Javascript

lets say that you do this

var myel = this.el; // here what you have is the html element, 
                    //you will be able to access(read/modify) the html 
                    //properties of this element,

with this

var my$el = this.$el; // you will have the element but 
                      //with all of the functions that jQuery provides like,
                      //hide,show  etc, its the equivalent of $('#myel').show();
                      //$('#myel').hide(); so this.$el keeps a reference to your 
                      //element so you don't need to traverse the DOM to find the
                      // element every time you use it. with the performance benefits 
                      //that this implies.

one is the html element and the other is the jQuery object of the element.

Solution 2 - Javascript

mu is too short is exactly right:

> this.$el = $(this.el);

And it's easy to understand why, look at the view's _setElement function:

> _setElement: function(el) { > this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); > this.el = this.$el[0]; > },

This ensures that the el property is always a DOM element, and that the $el property is always a jQuery object wrapping it. So the following is valid even though I used a jQuery object as the el option or property:

// Passing a jQuery object as the `el` option.
var myView = new Backbone.View({ el: $('.selector') });
// Using a jQuery object as the `el` View class property
var MyView = Backbone.View.extend({
    el:  $('.selector')
});

What is a cached jQuery object?

It's a jQuery object assigned to a variable for reuse purpose. It avoids the costly operation of finding the element through the DOM with something like $(selector) each time.

Here's an example:

render: function() {
    this.$el.html(this.template(/* ...snip... */));
    // this is caching a jQuery object
    this.$myCachedObject = this.$('.selector');
},

onExampleEvent: function(e) {
    // Then it avoids $('.selector') here and on any sub-sequent "example" events.
    this.$myCachedObject.toggleClass('example');
}

See an extensive answer I wrote to know more.

Solution 3 - Javascript

In short, el gives you access to HTML DOM elements, i.e you can refer and access them, whereas $el is jQuery wrapper around el.

$el not only provides access to particular DOM element, moreover it acts as a jQuery selector and you have privilege to use jQuery library functions like show(), hide(), etc on the particular DOM element.

Solution 4 - Javascript

It is so late to answer it but --> this.$el is a reference to the element in the context of jQuery, typically for use with things like .html() or .addClass(), etc. For example, if you had a div with id someDiv, and you set it to the el property of the Backbone view, the following statements are identical:

this.$el.html() $("#someDiv").html() $(this.el).html()

this.el is the native DOM element, untouched by jQuery.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionali asadView Question on Stackoverflow
Solution 1 - JavascriptRayweb_onView Answer on Stackoverflow
Solution 2 - JavascriptEmile BergeronView Answer on Stackoverflow
Solution 3 - JavascriptSourabh BhavsarView Answer on Stackoverflow
Solution 4 - JavascriptSamin FakharianView Answer on Stackoverflow