我为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用“正确”的上下文调用我的函数有任何想法?
答案 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)