3

我为 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被调用时(它是),this是指 Select2 实例而不是我的包装器。任何人对如何让 select2 使用“正确”上下文调用我的函数有任何想法吗?

4

1 回答 1

1

尝试使用function.bind显式绑定this上下文。原因是将thiscontext 设置为调用者的上下文(绑定函数除外),并且您的函数是从 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)
于 2013-10-06T00:47:11.783 回答