私は次のファイルを持っています:
layouts/application.html.erb
<div class="container">
<br>
<%= flash_messages %>
<%= yield %>
<script type="text/javascript">
$(document).ready(function() {
$('select').each(function(idx, elem) {
var $elem = $(elem);
$elem.select2();
});
<%= yield :document_ready %>
});
</script>
</div>
これはindex.html.erbです:
user_transactions/index.html.erb
<% content_for :document_ready do %>
<% render :partial => 'shared/datepicker' %>
<% end %>
<h3><%= I18n.translate("user_transaction.add") %></h3>
...
今、私はより流動的なインターフェースが欲しかったので、コントローラーでこれを行いました:
user_transactions_controller.erb
def index
@company = Company.find(params[:company_id])
@user_transactions = @company.user_transactions.order("date DESC").all
respond_to do |format|
format.js { render :layout => false }
format.html # index.html.erb
format.json { render json: @user_transactions }
end
end
そして、次のファイルを作成しました。
user_transactions/index.js.erb
document.getElementById('dashboard-body').innerHTML =
'<%= escape_javascript(render(:file => "user_transactions/index.html.erb")) %>'
:remote=>trueオプションを使用してページを呼び出します。それが良いかどうかはわかりませんが、うまくいきます。ここでこのテクニックを見つけました:js.html.erbファイルでindex.html.erbを返す方法
しかし、私が直面している問題の1つは、JavaScriptコードが機能しなくなったことです。実行する必要のあるselect2(レイアウト内)だけでなく、ビューindex.html.erb自体(datepicker)で宣言されている部分もあります。
JavaScriptを保持するだけでなく、ajaxと高速インターフェイスも保持するにはどうすればよいですか?