Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails 6:在呈现部分内容后执行JS函数_Javascript_Jquery_Ruby On Rails_Webpack_Webpacker - Fatal编程技术网

Javascript Rails 6:在呈现部分内容后执行JS函数

Javascript Rails 6:在呈现部分内容后执行JS函数,javascript,jquery,ruby-on-rails,webpack,webpacker,Javascript,Jquery,Ruby On Rails,Webpack,Webpacker,Rails和Javascript初学者 在一个培训项目中,我使用JQuery使flash消息在几秒钟后消失。访问者会发送AJAX请求将产品添加到他的购物车中,然后出现一个flash部分“Added to cart”,并在几秒钟后自动消失 #application.html.erb #共享/_flash.html.erb #这可以工作,但每次渲染部分时都会注入脚本 #helpers/application_helper.rb def显示_闪存(键、值) def显示_闪存(键、值) div_c

Rails和Javascript初学者

在一个培训项目中,我使用JQuery使
flash
消息在几秒钟后消失。访问者会发送AJAX请求将产品添加到他的购物车中,然后出现一个flash部分“Added to cart”,并在几秒钟后自动消失


#application.html.erb
#共享/_flash.html.erb
#这可以工作,但每次渲染部分时都会注入脚本
#helpers/application_helper.rb
def显示_闪存(键、值)
def显示_闪存(键、值)
div_class=[flash_class(键),'text center fade show alert dismissible'。加入(“”)
内容标签(:div,class:div\u class)do
内容标签(:p,值)+
按钮标签(类别:“ml自动关闭”,“数据解除”:“警报”,类型:“按钮”)do
content_标记(:span,×;'.html_safe,'aria hidden':'true')+
内容标签(:span'Close',class'sronly')
结束
结束
结束
结束
//app/javascript/packs/custom/flash.js
函数closeFlash(){
设lastAlert=$(“#flash.alert:last”)
函数fadeFlash(){
动画({opacity:0},2000,function()){
$(this.hide('slow',function()){
$(this.remove())
});
});
};
设置超时(fadeFlash,2000)
};
closeFlash();
问题是它用不必要的
标记污染了我的DOM:

这是可以修复的,但是在呈现(AJAX)部分内容之后,有没有合适的方法来执行一个特定的javascript函数? 在我的例子中,每次渲染一个部分时,执行
packs/custom/flash.js中的
closeFlash()

谢谢你的帮助和时间


编辑解决方案:

来自Amit Patel的回答和

它没有注入整个函数,而是(我相信)调用它所需的最少javascript代码。

移动到布局或应用程序.js`中,这样它就可以在整个应用程序中使用

像这样修改模板

application.html.erb

$(函数(){
closeFlash();
});

谢谢你的回答,阿米特,我会接受你的解决方案,因为它看起来很清楚。我相信它应该可以工作,但不知何故,我遇到了一个错误
jQuery。延迟异常:closeFlash未定义
。修复它会教我更多关于webpacker的知识,我想!再次感谢:)为了让它工作,我必须将
放在我的部分中,并像这样声明
closeFlash
函数:
window.closeFlash=function(){..}
。它仍然注入了
标记的内容,但是它更干净。Flash消息来自不同的来源(AJAX请求与否),我需要一种通用的方法来处理这些消息。不过,我不确定我是否清楚地理解了你的观点。我正在发布额外的代码我相信您感兴趣的是
create.js.erb
,它
。将
flash部分渲染附加到相关
和生成HTML的
显示flash
帮助器。消息内容存储在flash值中,而键用于设置正确的CSS类。
# app/views/shared/_flash.html.erb

<% flash.each do |key, value| %>
  <%= display_flash(key, value) %>

  <script>
    $(function() {
      closeFlash();
    });
  </script>

<% end %>
<div id='flash' class='flex-column'>
   <%= render partial: 'shared/flash'  %>
   <script>
     $(function(){
       closeFlash();
     });
   </script>
</div>