【问题标题】:Rails javascript calls after partial rendered部分渲染后的Rails javascript调用
【发布时间】:2013-11-23 01:48:40
【问题描述】:

在通过 AJAX 加载部分内容时,在 Rails 中放置 javascript/coffeescript 的正确位置是什么?

我想打电话:

$('.selector').datapicker() 

每次加载“_form”部分时。

我可以将它直接放入 _form.html.erb 部分,它会按预期工作,但我觉得它是 js 的错误持有人。

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    “正确的位置”应该在所有 js 脚本所在的 assets 文件夹中。

    你可以使用:

    $( document ).ajaxComplete(function( event,request, settings ) {
        $('.selector').datapicker();
    });
    

    【讨论】:

    • 我认为我不应该在每次 AJAX 调用时触发那个 js
    • 在你的 ajax 调用完成函数上触发它然后: $.ajax({ url: "your_url" }).done(function() { $('.selector').datapicker(); } );
    • 抱歉,明确确定每个 URL 运行的 js 听起来不是一个好主意
    【解决方案2】:

    如果您使用 UJS 数据远程执行 ajax,您可以连接到 UJS 生成的 ajax 事件。见这里:https://github.com/rails/jquery-ujs/wiki/ajax

    使用ajax:complete 将数据选择器重新添加到元素,例如:

    $('#submitted_form').on('ajax:complete', function(event, xhr, settings) {
      $('#date_field').datapicker();
    });
    

    ...然后这将进入您的 assets/javascript 文件夹。

    也可以看看这篇文章:http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

    【讨论】: