2012-01-19 12 views
11

Aşağıdaki kodda düzgün çalıştığı varsayılan iki jQuery seçicim var. Bir diğerini yerine getirmek için bir sebep var mı yoksa tercih edilen başka bir yol var mı?jQuery kullanarak Backbone.js'de, bir görünüm içinde bir öğeyi seçmek için doğru yol nedir?

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

Ben aynı kimliğe sahip birden unsurlar olmamalı farkındayım ama aynı kimliğe sahip birden unsurlar varsa, (örneğe bakın görünümünde yalnızca elemanı seçmek için en iyi yolu nedir kullanıcı adı için aşağıya).

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

--------------------- Güncelleştirme --------------------- ---

jsFiddle örneğini oluşturuyorum, böylece başka bir kişinin bakması için bir örnek olabilir. http://jsfiddle.net/BarDev/9QpKy/

cevap

25

Sadelik sağlamak için, genellikle Backbone-provided shortcut kullanın:

$('#username', this.el);

için bir takma ad

this.$('#username') 

Ancak, kullandığınız herhangi bir seçim yöntemi yeterince iyi çalışacaktır. Örneğinizde sahip olduğunuz diğer iki yol iyidir.

2

Her şeyden önce, bir sayfada aynı kimliğe sahip birden fazla öğeye sahip olmamanızı öneririm. Bundan kaçınmaya çalış. Bir eleman bulmaya gelince, ben find'un bağlamı geçen öğeyi seçmekten daha iyi olduğunu düşünüyorum çünkü içerik performans sebebi için iyidir, ancak findcontext'dan daha hızlıdır ve bu daha iyidir ve daha kompakt ve okunabilir.

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

Kontrol edemiyorum ama id göre seçerken bağlamın çok önemli bir performans olmadığını düşünüyorum. Ama yine de diğer durumlarda iyi bir tavsiyem – Guillaume86

+0

@ Guillaume86 - Evet, eğer kimlikler benzersiz ise, jQuery nesnesinde bulmanın bağlamını geçmeniz gerekmiyorsa, doğrudan seçiciyi kullanabilirsiniz. – ShankarSangoli

İlgili konular