如何确保Rails资产管道中的JQuery脚本在控制器特定的JS之后被调用

How do I make sure JQuery scripts in Rails asset pipeline are called after controller-specific JS?

本文关键字:控制器 脚本 JQuery 调用 之后 JS 确保 何确保 Rails 管道      更新时间:2023-09-26

例如:

我有一个通用的表单错误处理脚本,运行如下:

function default_form_method(){
    $("form[data-remote='true']").bind("ajax:error", function(evt, xhr, status, error){
        //show the errors, etc.
    })
    .bind('ajax:success', function(evt, data, status, xhr){
// clear the form, etc.
    });
}

现在,当我通过index.js.erb:等分部远程加载表单时

$(function(){
    $(".listing").html("<%= escape_javascript(render 'matches/a_cool_form') %>");
});

新加载的表单没有来自default_form_method的绑定。在过去,我通过在js.erb中再次调用该方法解决了这个问题,如下所示:

 $(function(){
        $(".listing").html("<%= escape_javascript(render 'matches/a_cool_form') %>");
default_form_method();
    });

但这似乎是多余的,我想知道(?)这是否会降低性能。

有什么解决方案可以使资产管道方法始终绑定,即使在客户端加载表单时也是如此?我认为这与最后加载函数有关。

这是因为绑定只绑定到现有元素,而不是动态加载的元素。你试过on(代替live)吗?

function default_form_method(){
    $("form[data-remote='true']").on("ajax:error", function(evt, xhr, status, error){
        //show the errors, etc.
    })
    .on('ajax:success', function(evt, data, status, xhr){
      // clear the form, etc.
    });
}