2012-01-19 7 views
11

En el siguiente código, tengo dos selectores jQuery que parecen funcionar correctamente. ¿Hay alguna razón para hacer una en lugar de la otra, o hay otra forma preferida?En Backbone.js usando jQuery, ¿cuál es la forma correcta de seleccionar un elemento dentro de una vista?

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

Soy consciente de que no debe haber múltiples elementos con el mismo ID, pero si hay varios elementos con el mismo ID, ¿cuál es la mejor manera de seleccionar sólo el elemento en la vista (véase el ejemplo a continuación para nombre de usuario).

<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> 

--------------------- Actualización --------------------- ---

Creo el ejemplo de jsFiddle para que pueda haber un ejemplo que funcione para otros. http://jsfiddle.net/BarDev/9QpKy/

Respuesta

25

Por razones de brevedad, por lo general utilizan el Backbone-provided shortcut:

this.$('#username') 

que es un alias para $('#username', this.el);

Sin embargo, cualquier método de selección que utilice funcionará bastante bien. Las otras dos formas que tienes en tu ejemplo son buenas.

2

En primer lugar, le sugiero que no tenga varios elementos con la misma identificación en una página. Intenta evitar eso. Para encontrar un elemento, creo que find es mejor que seleccionar el elemento que pasa el contexto porque el contexto es bueno por razones de rendimiento, pero find es más rápido que context por lo que es mejor y también es más compacto y legible.

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

No lo he comprobado, pero creo que al seleccionar por id el contexto no es tan importante en cuanto a rendimiento. Pero sigue siendo un buen consejo en otros casos – Guillaume86

+0

@ Guillaume86 - Sí, si los ids son únicos, entonces no es necesario pasar el contexto de find with en un objeto jQuery, puede usar directamente el selector de id. – ShankarSangoli

Cuestiones relacionadas