我有一個main.js.erb
,看起來像這樣:如何在.js.erb文件中執行模式的js渲染?
$(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
下面是部分的代碼,每烏代的要求 - 即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>
根本問題是爲什麼你把'main.js.erb'放入資產中? ERB模板不以任何方式屬於資產的一部分,不應該在那裏使用。我只是不明白它背後的想法。你能詳細說明一下嗎? – blelump 2014-11-24 11:51:19
那麼我剛開始只是'main.js'。然後我面臨的問題是我需要能夠渲染這些JS模式,所以我纔開始這樣做。唉,我們在這裏。 – marcamillion 2014-11-24 18:22:55
有兩種處理模態的方法。一種是將模態嵌入到ERB視圖中,然後通過$('#myModalLabel').model(show);'顯示出來。另一種是從給定動作中動態加載模態。在這種情況下,'get:action as HTML'應該加載對話框,'put/patch:action作爲JS/JSON'應該保持它提供的數據。應該使用哪種方法以及何時使用?這取決於用例。大量使用的模式可以通過視圖提供給用戶,其他人可以按需加載。 – blelump 2014-11-24 21:51:07