Select2:使formatSelection具有特定的上下文

时间:2013-10-06 00:42:52

标签: javascript jquery jquery-select2

我为Select2制作了一个非常简单的包装器(这确实有帮助),并且在使用formatSelection字段时遇到了麻烦。例如,我通过我的包装器启动Select2,如下所示:

this.elem.select2({
    allowClear : options.allowClear ? true : false,
    placeholder : options.placeholder ? options.placeholder : undefined,
    createSearchChoice : !options.preventNew ? this.newEntry : undefined,
    formatSelection : this.formatSelection,
    data : this.data
});

然而,问题是当调用this.formatSelection时({1}},this引用Select2实例而不是我的包装器。任何人对如何让select2用“正确”的上下文调用我的函数有任何想法?

1 个答案:

答案 0 :(得分:1)

尝试使用function.bind绑定this上下文显式。 Reason是this上下文被设置为调用者的上下文(绑定函数除外),并且您的函数是从select插件中调用的回调,因此具有formatSelection的上下文自然会是那个select2而不是你的插件实例。

this.elem.select2({
    allowClear : options.allowClear ? true : false,
    placeholder : options.placeholder ? options.placeholder : undefined,
    createSearchChoice : !options.preventNew ? this.newEntry : undefined,
    formatSelection : this.formatSelection.bind(this), //<-- here
    data : this.data
});

由于您使用的是jquery,因此您也可以使用$.proxy

formatSelection : $.proxy(this.formatSelection,this)