select2:是否可以传递自定义输入并在方法中访问它

时间:2017-07-31 12:08:12

标签: javascript jquery-select2

我想在创建select2时传递自定义属性。示例(我的自定义属性为myFilterEnabled):

$('#mySelId2').select2({
  myFilterEnabled: false, //Pass my initial state
  query: function(query) {
    var res = {
      results: CityFilter.cities
    };
    query.callback(res);
  }
});

并在查询或渲染函数中使用它。像:

$('#mySelId2').select2({
  myFilterEnabled: false,
  query: function(query) {
    var fltEnabled = this.myFilterEnabled; //Read current state
    var res = {
      results: fltEnabled ? [] : CityFilter.cities
    };
    query.callback(res);
  }
});

这样,变量有一个初始状态。但是,它可以在外部进行更改,我想在每次重新渲染/查询期间检查该状态。

编辑:似乎我在发帖前犯了一个错误。上面的代码似乎工作。我打算添加一个常见的前缀,例如' my'或者' myProj'这样它就不会与select2本身的任何变量发生冲突。

Edit2:如上所述,传递初始状态和读取当前状态正在起作用。我仍然需要一种从外部改变这种状态的方法。如果select2没有方法,我可以在元素上设置数据属性。

1 个答案:

答案 0 :(得分:0)

这是我想要的完整周期:

  

设置自定义状态 - >在查询/渲染期间读取自定义状态 - >更改用户操作的自定义状态 - >触发器重新渲染状态更改

这就是我现在设法做到的:

1)我可以在设置select2

时在选项中传递自定义参数
$('#mySelId2').select2({
            myFilterEnabled: false,
            query: function(query){ ...

2)我能够在回调中读取自定义参数

this.myFilterEnabled

3)我可以从外部设置自定义参数

$('#s2id_<myId>').data('select2').opts.myFilterEnabled = true;

3)如上所示设置属性后,我想要select2     重新应用query功能。我可以trigger change开启     input.select2-input。但是,有一个检查以防止重新执行     查询时文本保持不变。所以,我更进一步     并使用&#39; true&#39;来调用updateResults函数。论点。那     强制updateResult继续再次运行query。例如:

    $('#s2id_<myId>').data('select2').updateResults(true);