如何为formatResult和formatSelection(select2)传递变量?

时间:2017-09-19 19:06:40

标签: javascript jquery jquery-select2

例如,我有一个班级:

classA.js

$(document).ready(function() {
  select2_scroll('element_name_id')
});

调用一个函数

classB.js

function select2_scroll(elementId, queryString) {
resource_url: 'something/';
  $('#' + elementId).select2({
    allowClear: true,
    ajax: {
      url: resource_url,
      dataType: 'json',
      type: 'GET',
      quietMillis: 100,
      data: function (term, page) { 
        return {
          search_term: term,
          page: page
        };
      },
      results: function (data, page) {
        var more = (page * PAGE_LIMIT) < data.total_results;
        return { results: data.resource, more: more };
      }
    },
    formatResult: resourceName,
    formatSelection: resourceName,
  });
}

function resourceName(resource) {
  var format = '<div>' + resource.name + '</div>' +
           '<input type="hidden" name="' + elementId + '_id" value="' + resource.id + '"/>';

  return format;
}

如何避免使用全局变量传递elementId变量?我无法直接调用resourceName并通过调用resourceName(resource,elementId)传递elementId。

我是否遗漏了Select2组件中的内容?

3 个答案:

答案 0 :(得分:0)

您可以尝试以下方式:

 formatResult: ()=>{
                    resourceName(resource, elementId);
                 },
 formatSelection: ()=>{
                    resourceName(resource, elementId);
                 },

答案 1 :(得分:0)

在&#34;结果&#34;中添加您的元素ID返回

results: function (data, page) {
    var more = (page * PAGE_LIMIT) < data.total_results;
    return { results: data.resource, more: more, elementId: elementId };
  }

并在你的功能中使用它:

var format = '<div>' + resource.name + '</div>' +
       '<input type="hidden" name="' + resource.elementId + '_id" value="' + resource.id + '"/>';

如果这适合您,请告诉我。我没有用你的例子测试它

答案 2 :(得分:0)

我找到了解决问题的方法。我可以做到

...
formatResult: function(resource) {
      return resourceName(resource, elementId)
    },
formatSelection: function(resource) {
      return resourceName(resource, elementId)
    },
....

谢谢!