2012-01-19 10 views
11

W poniższym kodzie mam dwa selektory jQuery, które wydają się działać poprawnie. Czy jest jakiś powód, aby zrobić jeden zamiast drugiego, czy jest inny preferowany sposób?W Backbone.js przy użyciu jQuery, jaki jest właściwy sposób na wybór elementu w widoku?

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

Zdaję sobie sprawę, że nie powinno być wiele elementów z tym samym identyfikatorem, ale jeśli istnieje wiele elementów z tym samym identyfikatorem, co jest najlepszym sposobem, aby wybrać tylko element w widoku (patrz przykład poniżej dla nazwy użytkownika).

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

--------------------- Aktualizacja --------------------- ---

Tworzę przykład jsFiddle, aby mógł istnieć działający przykład dla innych osób do obejrzenia. http://jsfiddle.net/BarDev/9QpKy/

Odpowiedz

25

Dla zwięzłości, zazwyczaj użyć Backbone-provided shortcut:

this.$('#username') 

który jest aliasem dla $('#username', this.el);

Jednak każda metoda selekcji używać będzie działać dobrze. Pozostałe dwa sposoby, które masz w swoim przykładzie, są dobre.

2

Przede wszystkim sugerowałbym, aby nie mieć wielu elementów o tym samym id na stronie. Staraj się tego unikać. Wracając do znalezienia elementu, myślę, że find jest lepszy niż wybór elementu przechodzącego przez kontekst, ponieważ kontekst jest dobry ze względu na wydajność, ale find jest szybszy niż , więc jest lepszy, a także jest bardziej zwarty i czytelny.

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

Nie sprawdzam, ale myślę, że przy wyborze według identyfikatora kontekst nie jest tak ważny. Ale nadal jest to dobra rada w innych przypadkach. – Guillaume86

+0

@ Guillaume86 - Tak, jeśli identyfikatory są unikatowe, nie ma potrzeby przekazywania kontekstu wyszukiwania w obiekcie jQuery, można bezpośrednio użyć selektora id. – ShankarSangoli

Powiązane problemy