2012-01-19 7 views
11

Nel codice qui sotto ho due selettori jQuery che sembrano funzionare correttamente. C'è una ragione per fare uno invece dell'altro, o c'è un altro modo preferito?In Backbone.js utilizzando jQuery, qual è il modo corretto di selezionare un elemento all'interno di una vista?

var val1 = $("#username", this.el).val() 
var val2 = $(this.el).find("#username").val(); 

Sono consapevole del fatto che non ci dovrebbe essere più elementi con lo stesso ID, ma se ci sono più elementi con lo stesso ID, qual è il modo migliore per selezionare solo l'elemento nella vista (vedi esempio sotto per username).

<body> 
    Username: <input type="text" id="username" /><br /> 
    <br /><br /> 
    <div id="login"> 
     Username: <input type="text" id="username" /><br /> 
     <button id="loginButton">Login</button> 
    </div> 

    <script type="text/javascript"> 
     var LoginView = Backbone.View.extend({ 
      el: "#login", 
      events: { 
       "click #loginButton": "login" 
      }, 

      login: function() { 
       var val1 = $("#username", this.el).val() 
       var val2 = $(this.el).find("#username").val(); 

       console.log(val1); 
       console.log(val2); 
      } 
     }) 
     var loginView = new LoginView(); 
    </script>  
</body> 

--------------------- Aggiornamento --------------------- ---

Creo l'esempio jsFiddle in modo che possa essere visualizzato un esempio funzionante per altri. http://jsfiddle.net/BarDev/9QpKy/

risposta

25

Per brevità, io di solito uso l'Backbone-provided shortcut:

this.$('#username') 

che è un alias per $('#username', this.el);

Tuttavia, qualsiasi metodo di selezione si utilizza funzionerà abbastanza bene. Gli altri due modi che hai nel tuo esempio sono buoni.

2

Prima di tutto vorrei suggerire di non avere più elementi con lo stesso id su una pagina. Cerca di evitarlo. Venendo a trovare un elemento, penso che find sia meglio che selezionare l'elemento che passa il contesto perché il contesto è buono per il motivo delle prestazioni ma find è più veloce di context quindi è migliore e inoltre è più compatto e leggibile.

var val2 = $(this.el).find("#username").val(); 
+1

Non ho controllato, ma penso che quando si seleziona per id il contesto non sia così importante per quanto riguarda le prestazioni. Ma è ancora un buon consiglio negli altri casi – Guillaume86

+0

@ Guillaume86 - Sì, se gli ID sono unici allora non è necessario passare il contesto di find con in un oggetto jQuery, puoi usare direttamente il selettore ID. – ShankarSangoli

Problemi correlati