选择2个没有AMD的自定义dataAdapter

时间:2015-10-01 09:53:20

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

我想为select2创建一个自定义dataAdapter,但我在网上看到的例子都使用了AMD。我们在项目中不使用AMD。如何创建自定义dataAdapter?实现currentquery方法的普通对象是不够的。

2 个答案:

答案 0 :(得分:1)

Select2有一个内置的AMD加载程序,用于加载插件和适配器,因此您需要使用它来构建自定义数据适配器。

您可以在Add decorator to data adapter in Select2 version 4.x

找到自定义数据适配器的示例

您需要使用define中Select2提供的方法,而不是直接调用jQuery.fn.select2.amd。像

这样的东西
define('something/awesome', ['select2/data/array', function (ArrayAdapter) {
  // Use the array adapter
}]);

会变成

jQuery.fn.select2.amd.define('something/awesome', ['select2/data/array', function (ArrayAdapter) {
  // Use the array adapter
}]);

答案 1 :(得分:0)

事实证明,您几乎可以完全避免使用AMD。以下内容适用于select2版本4.0.10:

const ArrayAdapter = $.fn.select2.amd.require("select2/data/array");

class DataAdapter extends ArrayAdapter
{
    constructor($element, options)
    {
        super($element, options);
    }

    query(params, callback)
    {
        console.log("params: " + JSON.stringify(params));
    }
}

$("#my-combo-box").select2(
    {
        dataAdapter: DataAdapter
    }
);

您可以访问$.fn.select2.amd.require._defined["select2/data/array"]而不是调用amd.require(),但是走到这一步可能没有意义:)