Pouvez-vous indiquer la différence entre $el
et el
dans les vues Backbone.js?
Disons que vous faites cela
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,
avec ça
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.
L'un est l'élément html et l'autre est l'objet jQuery de l'élément.
Mu est trop court est exactement exact:
this.$el = $(this.el);
Et il est facile de comprendre pourquoi, regardez la fonction _setElement
la vue :
_setElement: function(el) { this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); this.el = this.$el[0]; },
Cela garantit que el
est toujours un élément DOM, et que $el
est toujours un objet jQuery de celui-ci. Donc, ce qui suit est valide même si j'ai utilisé un objet jQuery comme option ou propriété:
var myView = new Backbone.View({ el: $('.selector') }); // or var MyView = Backbone.View.extend({ el: $('.selector') });
C'est un objet jQuery conservé à l'intérieur d'une variable à des fins de réutilisation. Cela évite l'opération coûteuse de trouver l'élément avec quelque chose comme $(selector)
chaque fois.
Voici un exemple:
render: function() { this.$el.html(this.template(/* ...snip... */)); // this is caching a jQuery object this.$myCachedObject = this.$('.selector'); }, onExampleEvent: function(e) { // avoids $('.selector') here and on any sub-sequent example events. this.$myCachedObject.toggleClass('example'); }
Voir une réponse complète que j'ai écrite pour en savoir plus.
Il est si tard pour répondre, mais -> this.$el
est une référence à l'élément dans le contexte de jQuery, généralement pour une utilisation avec des choses comme .html()
ou .addClass()
, etc. Par exemple, si vous Avait un div avec id someDiv, et vous le définissez sur la propriété el de la vue Backbone, les instructions suivantes sont identiques:
this.$el.html() $("#someDiv").html() $(this.el).html()
this.el
est l'élément DOM natif, intact par jQuery.