选择2:使用自定义DataAdapter

时间:2018-03-08 11:17:28

标签: javascript jquery-select2 jquery-select2-4

我正在使用自定义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

谢谢!

1 个答案:

答案 0 :(得分:3)

我们也刚刚遇到了这个问题,而我却找不到有关如何“正确”实施此问题的任何信息。感觉到select2应该提供here的模式或问题我想念。

我提出了两种处理方法。

1。处理在调用select2之前添加装饰器的步骤

base.method();

用法更改为:Derived

2。覆盖为内置dataAdapters处理此问题的Defaults.apply方法

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));