所以我试图让 select2 插件与 Backbone.js / CakePHP 应用程序一起工作。这个想法是这个 select2 保存用于在任务完成时联系人们的电子邮件地址,但表单是可编辑的。我想要做的是(1)为正在编辑的任务加载/显示所有已保存的电子邮件地址,以及(2)我仍然希望 select2 执行 AJAX 搜索以列出已识别的电子邮件。我一直遇到这个问题,我既可以显示初始数据,也可以使用 AJAX 搜索功能。
我的 select2 框的当前代码是 Backbone.View,它看起来像:
define([
'backbone',
'jquery',
'jquery.select2'
],
function(Backbone, $, select2) {
var notificationSelector = Backbone.View.extend({
notifications: undefined,
events: {
'change' : 'select2ContactsChanged'
},
initialize: function(attrs) {
this.collection.on('add remove reset', this.render(), this);
this.select2ContactsChanged();
},
render: function() {
var contacts = ["abc@def.com", "joe@banana.com"];
$('.notification-selector').attr('value', contacts);
if(this.select2Control == undefined)
{
// Do Search() + query here
this.select2Control = this.$el.select2({
width: '200px',
placeholder: '@email',
tags: [],
minimumInputLength: 3,
// initSelection: function(element, callback) {
// return $.ajax({
// type: "GET",
// url: "/notifications/fetch/",
// dataType: 'json',
// data: { id: (element.val()) },
// success: function(data) {
// }
// }).done(function(data) {
// console.log(data);
// });
// },
});
}
else
{
// Do Search() + query here
this.select2Control = this.$el.select2({
width: '200px',
placeholder: '@email',
tags: [],
minimumInputLength: 3,
ajax: {
url: '/notifications/search/',
dataType: 'json',
data: function(term, page) {
return {
SearchTerm: term
};
},
results: function(data, page) {
return {
results: data
};
}
}
});
}
},
select2ContactsChanged: function() {
var contacts = this.select2Control.val().split(',');
this.collection.reset(contacts);
}
});
return notificationSelector;
});
我阅读了 Select2 的创建者对其他人的回复(https://github.com/ivaynberg/select2/issues/392),其中他说使用“自定义查询”来实现我想要的。我很难找到相关的例子或对文档有足够的意义来弄清楚他的意思。谁能发现我做错了什么/错过了什么?
谢谢你的时间!
编辑我忘了提到——它附加到的 DOM 元素是<input type="hidden" multiple="true" class="notification-selector select2-result-selectable"></input>