让Select2 Gem与ActiveAdmin一起工作按钮
Getting Select2 Gem to work with ActiveAdmin "Add New" Button
我有一个RubyOnRails应用程序,使用ActiveAdmin和Select2宝石。现在,我创建了一个搜索框,在输入两个字母后,会显示给定集合中的可能选项。下面是它的代码:
f.has_many :location_permissions, :allow_destroy => true, heading: 'Users With Access To This Installation' do |app_f|
app_f.input :user, :input_html => { :class => "user_select" }, :collection => User.all.map{ |user| ["#{user.name} (#{user.email})", user.id] }
end
这也会在下面创建一个"添加新"按钮。当按钮被点击,一个常规的ActiveAdmin下拉菜单出现,但我希望上面创建的Select2搜索菜单显示。我该怎么做呢?
下面是user_select函数:$('.user_select').select2({
minimumInputLength: 2
});
如果我单击add new按钮,那么它将创建一个新表单,保存空字段,然后刷新页面,新表单将成为我想要的Select2搜索表单。这让我认为Select2在页面加载时应用了JS和CSS,所以有可能通过AJAX或其他机制再次加载页面的那一部分吗?我不知道如何做到这一点,所以如果有人能指出我在一个资源做这样的事情,我会很感激的帮助。
我用下面的代码让它工作:
$(document).on('has_many_add:after', ->
$('select.user_select').select2({
minimumInputLength: 2
})
)
这是在Coffeescript中,但Javascript的形式非常相似,将"->"替换为function(){}。ActiveAdmin有一个名为has_many_add:after
的EventListener,它在按钮被点击后的一段时间被调用,你需要在此之后执行你的代码。上面的代码可以工作,因为事件仍然可以冒泡。
是的,通常在页面加载时初始化select2,这正是您看到您所描述的行为的原因。
你需要做的是将初始化器包装在另一个函数中,这个函数在你点击'Add New'按钮后被调用。我不熟悉ActiveAdmin,但假设它只是一个AJAX请求添加到表单,这样的东西应该工作:
$( document ).ready(function() {
setupSelect2();
});
$( document ).ajaxComplete(function() {
setupSelect2();
});
function setupSelect2() {
$('.user_select').select2({
minimumInputLength: 2
});
});
将所有这些放在一些外部js文件中,包括在application.js
中,看看是否解决了您的问题。
从此ActiveAdmin问题提供的解决方案
我们看到如何调用javascript/jQuery使用ActiveAdmin,一次性使用。其他答案提供了将.js
文件包含到ActiveAdmin配置中的方法。
这里是一个代码片段,用于实现OP自己的解决方案与Arbre的HTML构建器语法,在ActiveAdmin中使用:
script do
raw %(
$(document).on('has_many_add:after', () =>
$('select.user_select').select2({
minimumInputLength: 2
})
)
)
end
对于那些可能不熟悉如何在ActiveAdmin页面中实现JS作为实现所选答案的选项的人来说,这感觉很有帮助。
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- document.title函数可以't设置它与php一起工作
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- 非常简单的js测试;Don’不要和Minko一起工作
- 无法使我的文本参数与我的查询一起工作
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 无法使vash 0.8.0与express 4.12.3一起工作
- 如何使Angular JS控制器与指令一起工作
- 无法使autocompletion与bootstrap和php代码点火器一起工作
- 注入的元素和jQuery脚本.如何让他们一起工作
- 两个独立工作的javascript函数,但不能一起工作
- 角度和砖石一起工作
- Node http-proxy-middleware 不能与本地服务器一起工作
- jQuery脚本不想一起工作
- page.js使examples/hash与hashbang:true一起工作
- javascript使jquery倒计时与UTC时间一起工作
- jQuery.not()选择器无法与类一起工作
- Rails3-可排序列表不能与wysihtml5一起工作
- 替换匹配函数给出了未定义的错误,但它与替换一起工作
- 按钮上的数据加载消息无法与ajax调用一起工作