使用远程数据选择2并预选自定义选项

时间:2017-09-25 19:46:52

标签: javascript jquery-select2-4

我正在使用带有远程数据和服务器分页的Select2 4.0.3,它运行正常。从api返回的数据有其他字段,如下所示:

var data = {
  id: 12345,
  text: 'John Doe',
  email: 'abc@123.com'
}

根据这里的文档是如何在使用远程数据时预先选择一个选项的例子,这也很好(有一个问题如下所示):

$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
    }).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

文档解释了最后一点:

  

请注意,我们手动触发select2:select事件并传递   沿着整个数据对象。这允许其他处理程序   访问所选项目的其他属性。

在我的情况下,附加属性是电子邮件字段。

我的问题/问题是,对于上述'手动'附加选项select2 JSON数据仅包含idtext字段。如果用户单击列表并允许其填充服务器中的数据,则数据将包含idtextemail字段。

解释为什么需要触发器的文档声明向我表明从api返回的数据对象将被传递(并且可能被使用),但似乎并非如此。

所以在我的情况下,遗漏或包含触发器部分对控件没有影响,所以我是否误解了该代码的用途或者select2没有按照文档记录工作?

例如,在用于格式化控件选择的templateSelection函数中,在执行追加和触发器代码时调用该函数,传递给函数的对象只有idtext属性。实际上,如果原始数据对象具有完全不同的属性,例如namevalueemail,则传递给该函数的数据对象仍具有id和{{1只有,这是select2使用的text对象。此行为迫使我修改对象以符合default模式。

0 个答案:

没有答案