如何在 .js.erb 文件中执行模态的 js 渲染

How do I execute a js render of a modal in a .js.erb file?

本文关键字:js 模态 执行 渲染 文件 erb      更新时间:2023-09-26

我有一个看起来像这样的main.js.erb

$(document).on("page:change", function(){
  MainJS.init();
    $("#add-video-step-1").html("<%= escape_javascript(render 'videos/upload_video') %>");
    $('#myModalLabel').modal(show);
    Ladda.bind('#video-submit');
    console.log("Upload.js.erb has been executed");
});

基本上我想发生的是每当按下带有 id #video-submit 的按钮时,我希望它执行部分videos/upload_video中的模态。

我认为只需做一个常规render 'videos/upload_video'就足够了,但是当我尝试这样做时,我收到此错误:

NoMethodError at /
undefined method `render' for #<#<Class:0x007f916fcf1310>:0x007f91721a9c20>
  (in /app/assets/javascripts/main.js.erb)

在这一行:

$("#myVCModal").html("<%= escape_javascript(render 'videos/upload_video') %>");

思潮?

编辑 1

这是部分的代码,根据uDAY的请求 - 即 video/_upload_video.html.erb

<div class="bootstrap-styles">
 <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">Upload your Video</h3>
    <p><i>Step 2 of 2 - TEST</i></p>
  </div>
  <div class="modal-body">
    <div class="form">
      <%= form_tag @upload_info[:url], :multipart => true do %>
        <div>Step 2 of 2</div>
        <%= hidden_field_tag :token, @upload_info[:token] %>
        <%= file_field_tag :file, title: 'Choose video to upload' %>
        <p class="uploader">
          <button class="btn btn-success ladda-button" data-color="green" data-style="expand-left"><span class="ladda-label">Upload Video</span><span class="ladda-spinner"></span></button>
        </p>
      <% end %>
    </div>
  </div>
  <div class="modal-footer">
  </div>
</div>

您收到错误render因为这是一种views (ActionView)方法,并且您正在不可用的资产中尝试它。因此,要使其正常工作,我们应该做的是初始化ActionView为此,您的main.js.erb应该是这样的:

$(document).on("page:change", function(){
  MainJS.init();
    <% action_view = ActionView::Base.new(Rails.configuration.paths["app/views"].first) %>
    $("#add-video-step-1").html("<%= action_view.escape_javascript(action_view.render 'videos/upload_video') %>");
    $('#myModalLabel').modal(show);
    Ladda.bind('#video-submit');
    console.log("Upload.js.erb has been executed");
});

刚刚尝试过,它对我有用,试一试,知道它是否适合你:)


对于 ajax 请求和渲染部分内容,您可以简单地向 a 发送 ajax 请求controller action将以下代码放入相应的视图文件 ( action.js.erb ):

$("#add-video-step-1").html("<%= escape_javascript(render 'videos/upload_video') %>");
$('#myModalLabel').modal(show);