我有一个RubyOnRails应用程序,它使用ActiveAdmin和Select2 Gems。现在,我创建了一个搜索框,在输入两个字母后,它会显示给定集合中的可能选项。下面是代码:
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 或其他机制再次加载页面的这一部分?我不知道该如何做。所以如果有人能给我指出一个资源来做这样的事情,我会很感激你的帮助。
3条答案
按热度按时间guykilcj1#
最后我用下面的代码让它工作:
这是在Coffeescript中,但其Javascript形式非常相似,请将“-〉”替换为function(){}。ActiveAdmin有一个名为
has_many_add:after
的EventListener,它会在单击按钮一段时间后调用,您需要在此之后执行代码。由于事件仍然可以冒泡,因此上述代码可以正常工作。7cjasjjr2#
是的,通常select2是在页面加载时初始化的,这正是您看到所描述的行为的原因。
你需要做的是将初始化器 Package 在另一个函数中,这个函数在你点击“Add New”按钮后被调用。我对ActiveAdmin不熟悉,但是假设它只是一个 AJAX 请求来添加到表单中,应该可以像这样工作:
将所有这些放在某个外部js文件中,并将其包含在
application.js
中,看看这是否能解决您的问题。nbysray53#
从此ActiveAdmin问题中提供的解决方案
我们看到了如何使用ActiveAdmin调用javascript / jQuery,这是一次性的。其他答案提供了将
.js
文件包含到ActiveAdmin配置中的方法。下面是一段代码片段,用于使用ActiveAdmin中使用的Arbre HTML构建器语法实现OP自己的解决方案:
这感觉很有帮助,因为对于那些可能不熟悉如何在ActiveAdmin页面中实现JS作为实现所选答案的选项的人来说。