jquery绑定上下文不匹配

时间:2013-04-04 19:49:57

标签: jquery binding jquery-context

我有一个HTML菜单选项,我在jQuery中绑定了一个click处理程序:

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 个答案:

答案 0 :(得分:2)

您仍然可以在xyz中定义的方法中对它进行闭包访问。

您只需致电xyx.getMainContainerSelector();

即可

如果你想要一个jQuery ish解决方案,jQuery有一个绑定上下文的jQuery.proxy()函数:

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

我认为第一种选择更好。