2011-10-12 30 views
18

Tôi đang ở trong một đối tượng javascript (vr roxx :)), nhưng mỗi khi tôi thực hiện một sự kiện ràng buộc với jQuery tôi phải bao gồm bối cảnh của cá thể đối tượng chính thông qua tham số dữ liệu để làm việc với nó. Không phải là một cách dễ dàng/gọn gàng để làm điều này trong jQuery?Có cách nào để vượt qua ngữ cảnh để ràng buộc trong jQuery không?

var oink = 
{ 
    pig: null, 

    options:  
    { 
     showPigMom: 0 
    }, 

    init: function(pigObj) 
    { 

     //Show the pigmom 
     $(this.doc).bind('keyup click', {o: this}, function(e) 
     { 
      var o = e.data.o; 
      if (o.options.showpath) 
       o.doWhatever(); 
     }); 

    ... 
+8

... và trong đối tượng này, ông đã có một con lợn: o, e.data.o .... – Blazemonger

Trả lời

23

tôi sử dụng $.proxy() chức năng

init: function(pigObj) 
{ 
    //Show the pigmom 
    $(this.doc).bind('keyup click', $.proxy(function(e) { 
     if (this.options.showpath) 
      this.doWhatever(); 
     $(e.currentTarget).text(); // use this to access the clicked element 
    }, this)); 
} 
3
init: function() { 
    var self = this; 
    $(this.doc).bind('keyup click', function() { 
     if (self.options.showpath) self.doWhatever(); 
    }); 
} 
+1

$. proxy() hoặc _.bind() nên được ưu tiên hơn trường cũ với các biến ngữ cảnh rõ ràng – mPrinC

+1

'proxy' trông sạch hơn, nhưng có gì sai với trường cũ, @mPrinC? – seebiscuit

2
init: function() { 
    $(this.doc).bind('keyup click', function() { 
     if (this.options.showpath) this.doWhatever(); 
     $(e.currentTarget).text(); // use this to access the clicked element 
    }.bind(this)) 
} 
Các vấn đề liên quan