2013-04-04 38 views
0

我有一個HTML菜單選項,這是我在jQuery的綁定一個click處理程序:jQuery的綁定上下文匹配

var xyz = { 
    getMainContainerSelector: function() { 
     return '.container#main'; 
    }, 
    bindMenuOptions: function() { 
     $('#menu_outcome_list').bind('click', function() { 
      // inject template 
      $(this.getMainContainerSelector()).html(ich.outcomeListTemplate({})); 
      // load datatable 
      $('#outcomes').dataTable({ 
       "bServerSide": true, 
       'sPaginationType': 'bootstrap', 
       "sAjaxSource": '../php/client/json.php?type=outcomes' 
      }); 
     }); 
    }, 
    ... 
} 

我有下面的行了一個問題:

$(this.getMainContainerSelector()).html(ich.outcomeListTemplate({})); 

我想這是一個背景問題。我的意思是,在綁定函數中,this不再是xyz,而是('#menu_outcome_list')HTML元素。我想要做的只是從綁定函數中調用xyz的方法。

+1

確實xyz.getMainContainerSelector()不起作用? – 2013-04-04 19:51:36

+1

注意,使用'.container#main'沒有什麼意義,只要使用'#main' – 2013-04-04 19:53:03

+0

@KevinB,好吧,你是對的;) – ducin 2013-04-04 19:54:49

回答

2

您仍然可以在xyz中定義的方法中對其進行閉包訪問。

您只需調用xyx.getMainContainerSelector();

如果你想要一個jQuery ISH的解決方案,jQuery有一個jQuery.proxy()功能結合上下文:

$('#menu_outcome_list').bind('click', $.proxy(function(){ 
    //rest of your code 
},xyz)}) 

我覺得第一個選項是更好不過。

+1

只有當'xyz'變量值沒有改變在之間。爲了安全,OP可以在'bindMenuOptions'內聲明一個變量'var _this = this'。無論如何。 – 2013-04-04 19:53:29

+0

@Benjamin - 所以如果我使用這個代理的東西,這個''會和'xyz'一樣嗎?你能解釋爲什麼'xyz.get ...'在你看來更好嗎? – ducin 2013-04-04 19:56:56

+0

順便說一句,我能做 '$('#menu_outcome_list')。bind('click',$ .proxy(function(){...},this)' - 還是會得到相同的錯誤? – ducin 2013-04-04 19:58:20