2013-04-04 2 views
0

У меня есть пункт меню HTML, который я связать click обработчик в JQuery: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, а элемент HTML ('#menu_outcome_list'). То, что я хочу сделать, это просто вызвать метод xyz изнутри функции bind.

+1

. Xyz.getMainContainerSelector() не работает? –

+1

примечание стороны, используя '.container # main', не имеет смысла, просто используйте' # main' –

+0

@KevinB, ну, вы правы;) – ducin

ответ

2

У вас все еще есть доступ к закрытию в методах, которые вы определяете в xyz.

Вы можете просто позвонить xyx.getMainContainerSelector();

Если вы хотите раствор jQuery МОГ, JQuery имеет jQuery.proxy() функцию, которая связывает контекст:

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

Я думаю, что первый вариант лучше, хотя.

+1

Только если значение переменной 'xyz' не изменилось между. Чтобы быть безопасным, OP мог объявить переменную 'var _this = this' внутри' bindMenuOptions'. +1 в любом случае. –

+0

@Benjamin - так, если я использую эту прокси-серверу, 'this' будет таким же, как' xyz', правильно? Не могли бы вы объяснить, почему «xyz.get ...» лучше, по вашему мнению? – ducin

+0

Кстати, могу ли я сделать '$ ('# menu_outcome_list'). Bind ('click', $ .proxy (function() {...}, this)' - или я получу ту же ошибку? – ducin

Смежные вопросы