我正在使用自定义dataAdapter,并尝试使用Select2 jQuery插件中的'tags'属性。但是在文档中找到的例子根本不起作用,'tags'属性被简单地忽略(这只在使用自定义dataAdapter时发生,否则它正常工作)。
所以这不起作用:
$(".js-example-tags").select2({
tags: true
});
作为解决方案,我发现我们可以在dataAdapter中使用标签的装饰器,它确实有效!问题是,它总能奏效。因此,如果我在HTML中有两个'select'标签,并且我希望其中一个标签为'tags:true'而另一个标签为'tags:false',那么它们都会因为这个装饰器而启用标记。我尝试过设置'tags:false',但它不起作用。
我在想一个解决方案是在dataAdapter中,为装饰器创建一个if语句,以便应用它。但问题是,当创建第一个'select'时,此特定代码仅执行一次。
所以我想如果我使用dataAdapter创建多个选择,那么它们都将具有相同的装饰器。而且我认为拥有多个dataAdapter对我来说不是一个解决方案。
所以我的问题是,如果我有多个'select'元素,我如何使用不同的装饰器来应用它们?还使用相同的dataAdapter?
我还有一个JSFiddle: Tags with dataAdapter
谢谢!
答案 0 :(得分:3)
我们也刚刚遇到了这个问题,而我却找不到有关如何“正确”实施此问题的任何信息。感觉到select2应该提供here的模式或问题我想念。
我提出了两种处理方法。
base.method();
用法更改为:Derived
method()
用法不变:(function ($) {
var CustomDataAdapter = $.fn.select2.amd.require('select2/data/customDataAdapter');
var Utils = $.fn.select2.amd.require('select2/utils');
var Tags = $.fn.select2.amd.require('select2/data/tags');
var MinimumInputLength = $.fn.select2.amd.require('select2/data/minimumInputLength');
$.fn.mySelect2 = function(options) {
if (!options.dataAdapter && options.customDataAdapterOptions) {
options.dataAdapter = CustomDataAdapter;
if (options.minimumInputLength > 0) {
options.dataAdapter = Utils.Decorate(options.dataAdapter, MinimumInputLength);
}
if (options.tags) {
options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
}
}
return this.select2(options);
};
}(jQuery));