2011-09-15 5 views
1

Dans l'extrait de code suivant, dois-je mettre en cache $ (« # chargement ») dans un autre objet (Appelons il JqueryDOMCache) ou Backbone fait pour moi? Je veux rendre l'application performante car j'ai 300 interactions DOM bizarres.Comment mettre en cache des éléments DOM avec backbone.js?

 var BeforeApploadView = Backbone.View.extend({ 
       el : "#loading", 
       render : function(){ 
        $(this.el).show(); 
       }, 
       hide : function(){ 
        $(this.el).hide(); 
       } 
      }); 

     var App = (function($){ 
      var app = {}; 
      app.start = function(s){ 
       var beforeLoadView =new BeforeApploadView(); 
       beforeLoadView.render(); 
      }; 
      return app; 
     }); 

Répondre

0

Non, vous n'avez rien de spécial à faire. Il y a deux raisons à cela:

  • Tant que vous avez encore une référence à votre BeforeApploadView, il a une référence à el pour qu'il reste en vie.
  • La fonction jQuery hide ne supprime pas le elmenet du DOM. Il s'applique uniquement style="display: none" à l'élément. Le DOM conserve également une référence à l'élément.

Vous devriez être tous ensemble.

+0

Merci Brian, de sorte que chaque .render() appel ne crée pas un nouvel objet jquery? Dans ce cas, si j'ai plusieurs appels jquery dans ma fonction de rendu, chaque objet reste en cache ou seulement l'objet de niveau supérieur? – papdel

+0

Il ne crée pas un nouvel objet. Il n'y a pas de magie dans la fonction de rendu. Ce que vous écrivez est ce que vous obtenez. Donc, le 'show' jQuery prend simplement le style' display: none' sur le 'el' qui est déjà dans le DOM. Aucun élément nouveau est créé :) Merci –

+0

Brian, en passant par les Backbone.js source révèle beaucoup - comme ça ... // élément recherche dont la portée a à DOM éléments dans la vue actuelle. // Ceci devrait être préféré aux recherches globales, si vous avez affaire à // une vue spécifique. var selectorDelegate = function (sélecteur) {$ retour (sélecteur, this.el); }; – papdel

Questions connexes