61 votes

Quelle est la différence entre $el et el dans les vues Backbone.js ?

Pouvez-vous s'il vous plaît dire la différence entre $el y el dans les vues Backbone.js ?

3 votes

L'avez-vous vérifié dans le documentation ?

0 votes

1 votes

Je n'ai pas compris ce que signifie cette déclaration "objet jQuery en cache" pour $sl.

84voto

Rayweb_on Points 2475

Disons que vous faites ceci

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 ceci

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.

0 votes

Est-il possible d'écrire une requête sur this.$el ? Par exemple, écrire this.$el(".some-class") afin d'obtenir l'élément avec .some-class qui est contenu dans le html de la vue.

2 votes

Pas pour moi, this.$el('.class') me file $el n'est pas une fonction, je dois utiliser find : this.$el.find('.class')

0 votes

@JamesLock vous devez utiliser this.$('.class') . Vous confondez un objet jQuery avec La fonction principale de jQuery . this.$el('.class') c'est comme $('.selector')('.class') ça ne marche pas comme ça.

6voto

emileb Points 614

mu est trop court c'est exactement ça :

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

Et il est facile de comprendre pourquoi, regardez les de la vue _setElement fonction :

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

Cela permet de garantir que le el est toujours un élément DOM, et que la propriété $el est toujours un objet jQuery qui l'enveloppe. Ainsi, ce qui suit est valable même si j'ai utilisé un objet jQuery comme propriété el option ou propriété :

// 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')
});

Qu'est-ce qu'un objet jQuery en cache ?

C'est un objet jQuery assigné à une variable pour être réutilisé. Cela évite l'opération coûteuse de trouver l'élément à travers le DOM 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) {
    // Then it avoids $('.selector') here and on any sub-sequent "example" events.
    this.$myCachedObject.toggleClass('example');
}

Voir un réponse détaillée J'ai écrit pour en savoir plus.

2voto

Sourabh Bhavsar Points 91

En bref, el vous donne accès aux éléments HTML DOM, c'est-à-dire que vous pouvez les référencer et y accéder, tandis que $el est un wrapper jQuery autour de el.

$el ne permet pas seulement d'accéder à un élément particulier du DOM, mais il agit également comme un sélecteur jQuery et vous avez le privilège d'utiliser les fonctions de la bibliothèque jQuery comme show(), hide(), etc. sur l'élément particulier du DOM.

1voto

Samin Fakharian Points 35

Il est si tard pour répondre mais this.$el es un référence à l'élément dans le contexte de jQuery, typiquement pour une utilisation avec des choses comme .html() o .addClass() etc. Par exemple, si vous avez un div avec l'id someDiv, et que vous lui attribuez la valeur el de la vue Backbone, les déclarations suivantes sont identiques :

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

this.el est l'élément DOM natif, non modifié par jQuery.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X