我正在将转换为select2下拉列表,并通过query方法向其提供数据
$('#inputhidden').select2({
query: function( query ) {
query.callback( data ); // the data is in the format select2 expects and all works well..
);
});
问题是我需要黑掉select2 UI并在搜索栏顶部放置两个按钮,点击这些按钮后,将执行ajax调用并更新select2内容。
现在,我需要进行这些更新,而不需要完全重建select2,而是只需要刷新下拉列表上的项目。我找不到一种方法来传递一组新的数据给一个已经创建的select2控件,这可能吗?
如果您有带有选项的本地数组(由ajax调用接收),我认为您应该使用data
参数作为为选择框返回结果的函数:
var pills = [{id:0, text: "red"}, {id:1, text: "blue"}];
$('#selectpill').select2({
placeholder: "Select a pill",
data: function() { return {results: pills}; }
});
$('#uppercase').click(function() {
$.each(pills, function(idx, val) {
pills[idx].text = val.text.toUpperCase();
});
});
$('#newresults').click(function() {
pills = [{id:0, text: "white"}, {id:1, text: "black"}];
});
小提琴:http://jsfidle.net/rvnfn/576/
如果您使用按钮自定义select2接口,只需在更新数据数组(示例中的pills)后调用updateResults
(此方法不允许从select2对象的外部调用,但如果需要,您可以将其添加到select2中的AllowedMethods
数组)方法。
带有附加updateoptions
(不清楚原始arrayadapter
缺少此功能的原因)方法的自定义数据适配器可用于动态更新选项列表(本例中为所有选项):
$.fn.select2.amd.define('select2/data/customAdapter',
['select2/data/array', 'select2/utils'],
function (ArrayAdapter, Utils) {
function CustomDataAdapter ($element, options) {
CustomDataAdapter.__super__.constructor.call(this, $element, options);
}
Utils.Extend(CustomDataAdapter, ArrayAdapter);
CustomDataAdapter.prototype.updateOptions = function (data) {
this.$element.find('option').remove(); // remove all options
this.addOptions(this.convertToOptions(data));
}
return CustomDataAdapter;
}
);
var customAdapter = $.fn.select2.amd.require('select2/data/customAdapter');
var sel = $('select').select2({
dataAdapter: customAdapter,
data: pills
});
$('#uppercase').click(function() {
$.each(pills, function(idx, val) {
pills[idx].text = val.text.toUpperCase();
});
sel.data('select2').dataAdapter.updateOptions(pills);
});
小提琴:https://jsfidle.net/xu48n36c/1/
在v4中,您可以定义可以使用本地数据数组的自定义传输方法(例如,thx@caleb_kiage,我使用了它但没有成功)
docs:https://select2.github.io/options.html#can-an-ajax-plugin-other-than-jqueryax-be-used
Select2使用在ajax.transport中定义的传输方法向您的API发送请求。默认情况下,这个传输方法是jQuery.ajax,但这是可以更改的。
$('select').select2({
ajax: {
transport: function(params, success, failure) {
var items = pills;
// fitering if params.data.q available
if (params.data && params.data.q) {
items = items.filter(function(item) {
return new RegExp(params.data.q).test(item.text);
});
}
var promise = new Promise(function(resolve, reject) {
resolve({results: items});
});
promise.then(success);
promise.catch(failure);
}
}
});
但是使用这种方法,如果数组中的选项文本发生变化-内部选择2 dom选项元素列表没有修改,则需要更改选项的ID。如果数组中的选项id保持不变-将显示先前保存的选项,而不是从数组中更新!如果只是通过向数组中添加新项来修改数组,那么这没有问题--对于大多数常见的情况是可以的。
问题内容: 我正在使用select2插件(v4),并使用ajax加载他的选项。 如果我第一次打开选择输入,将加载数据。当我再次打开选择时,将重新加载相同的数据。 有什么方法可以防止这种“重新加载”数据?我的意思是,如果我只是打开select2并且先前已加载选项,则我不想再次加载。 这是我当前的代码: 问题答案: 由于您正在使用select2_v.4,因此必须使用(并且方法在V.4.0中已弃用)以下
嗨,我是Spring Data JPA的新手,我想知道即使我将Id传递给实体,Spring data jpa也是插入而不是合并的。我想当我实现持久接口并实现这两个方法时: 它将自动合并而不是持久化。 我有一个名为User like的实体类: 再上一节课 我有一个名为UserRepostory的自定义存储库,它扩展了JpaReopistory。当我看到实现演示SpringDataJpa使用以上两种方
问题内容: 我在一个选项卡中有一个数据表,该表是从索引方法上的控制器发送的数据中加载的。 我有加载数据表的视图 然后在加载页面时在javascript中加载数据表 我也有删除功能。如何在不重新加载页面的情况下重新加载数据(使用Ajax从控制器再次获取数据)? 问题答案:
出于某种原因,当这个JTable被调用时,它没有任何变化(这个方法在用户提交SQL查询后更新JTable)。 给定:验证数据向量和列名称向量是否正确填充。JTable 是一个私有类变量。 有什么想法吗?
我的web应用程序与外部系统有几个集成,所有这些集成Rest URL都保存在web应用程序中的配置文件中。我的应用程序在启动时读取此配置文件,并在连接到外部系统时使用URL值。但经常发生的情况是,其中一个外部系统关闭,我们必须使用另一个URL。在这种情况下,我们通常必须修改配置并重新部署war文件。有没有一种方法可以在不重新部署war文件的情况下用新值修改配置文件?
问题内容: 我对/ 有问题。我的数据表未刷新/更新。我正在使用,根据代码,一切都很好,并且没有任何错误。我也有一个带有分页的表,这就是为什么我使用动作监听器和按钮“上一个”和“下一个”的原因。我正在从其他函数传递到在is中的类中编码的函数 。问题是我填充了包含表数据的数组,但是表不会更新/刷新它。这是我的代码。谢谢前进。 大编辑 旧代码已删除。我添加了新代码,可以帮助您了解我的问题。希望这会有所帮