2013-05-20 26 views
54

Bạn có thể cho biết sự khác biệt giữa $elel trong chế độ xem Backbone.js không?

+3

Bạn đã kiểm tra nó trong [tài liệu] (http://backbonejs.org/#View-el) chưa? – nemesv

+0

bản sao có thể có của [Tại sao biến JavaScript bắt đầu bằng ký hiệu đô la?] (Http: // stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-đô-la-ký) – Quentin

+1

Tôi không nhận được câu lệnh này có nghĩa là "đối tượng jQuery được lưu trong bộ nhớ cache" cho $ sl –

Trả lời

76

cho phép nói rằng bạn làm điều này

var myel = this.el; // here what you have is the html element, 
        //you will be able to access(read/modify) the html 
        //properties of this element, 

với điều này

var my$el = this.$el; // you will have the element but 
         //with all of the functions that jQuery provides like, 
         //hide,show etc, its the equivalent of $('#myel').show(); 
         //$('#myel').hide(); so this.$el keeps a reference to your 
         //element so you don't need to traverse the DOM to find the 
         // element every time you use it. with the performance benefits 
         //that this implies. 

là một trong những yếu tố html và người kia là đối tượng jQuery của nguyên tố này.

+0

Có hợp lệ để viết truy vấn về điều này. $ el? Ví dụ: viết $ el (". Some-class") để lấy phần tử với .some-class được chứa trong html của khung nhìn. – MobileDream

+0

có nó hoàn toàn hợp lệ. –

+2

Không phải cho tôi, 'này. $ El ('. Class')' lưới tôi $ el không phải là một hàm, tôi phải sử dụng find: 'this. $ El.find ('. Class')' –

0

Đó là quá muộn để trả lời nó, nhưng -> this.$el là một tài liệu tham khảo đến phần tử trong bối cảnh của jQuery, thường để sử dụng với những thứ như .html() hoặc .addClass() vv Ví dụ, nếu bạn có một div với id someDiv và bạn đặt nó vào el tài sản của quan điểm Backbone, thông báo sau đều giống hệt nhau:

this.$el.html() $("#someDiv").html() $(this.el).html() 

this.el là phần tử DOM bản địa, không bị ảnh hưởng bởi jQuery.

3

mu is too short là chính xác đúng:

this.$el = $(this.el); 

Và thật dễ dàng để hiểu lý do tại sao, nhìn vào view's _setElement function:

_setElement: function(el) { 
    this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); 
    this.el = this.$el[0]; 
}, 

này đảm bảo rằng el luôn a là Phần tử DOM và $el luôn là đối tượng jQuery của nó. Vì vậy, sau đây là hợp lệ mặc dù tôi đã sử dụng một đối tượng jQuery như el tùy chọn hoặc tài sản:

var myView = new Backbone.View({ el: $('.selector') }); 
// or 
var MyView = Backbone.View.extend({ 
    el: $('.selector') 
}); 

một đối tượng jQuery cache là gì?

Đó là một đối tượng jQuery được lưu giữ bên trong một biến cho mục đích tái sử dụng. Nó tránh các hoạt động tốn kém của việc tìm kiếm các yếu tố với một cái gì đó như $(selector) mỗi lần.

Dưới đây là một ví dụ:

render: function() { 
    this.$el.html(this.template(/* ...snip... */)); 
    // this is caching a jQuery object 
    this.$myCachedObject = this.$('.selector'); 
}, 

onExampleEvent: function(e) { 
    // avoids $('.selector') here and on any sub-sequent example events. 
    this.$myCachedObject.toggleClass('example'); 
} 

Xem một extensive answer Tôi đã viết thư cho biết thêm.

0

Tóm lại, el cung cấp cho bạn quyền truy cập vào các phần tử HTML DOM, tức là bạn có thể tham chiếu và truy cập chúng, trong khi $ el là trình bao bọc jQuery quanh el.

$ el không chỉ cung cấp quyền truy cập vào phần tử DOM cụ thể, hơn nữa nó hoạt động như bộ chọn jQuery và bạn có đặc quyền sử dụng các hàm thư viện jQuery như show(), hide(), v.v ... trên phần tử DOM cụ thể.

+0

Đó là về jQuery và câu hỏi là về 'backbone.js' –

Các vấn đề liên quan