我正在使用带有远程数据和服务器分页的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数据仅包含id
和text
字段。如果用户单击列表并允许其填充服务器中的数据,则数据将包含id
,text
和email
字段。
解释为什么需要触发器的文档声明向我表明从api返回的数据对象将被传递(并且可能被使用),但似乎并非如此。
所以在我的情况下,遗漏或包含触发器部分对控件没有影响,所以我是否误解了该代码的用途或者select2没有按照文档记录工作?
例如,在用于格式化控件选择的templateSelection函数中,在执行追加和触发器代码时调用该函数,传递给函数的对象只有id
和text
属性。实际上,如果原始数据对象具有完全不同的属性,例如name
,value
和email
,则传递给该函数的数据对象仍具有id
和{{1只有,这是select2使用的text
对象。此行为迫使我修改对象以符合default
模式。