我有以下文件:
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
然而,我面临的一个问题是所有的 javascript 代码都不再工作了。有需要运行的 select2(在布局中),还有在视图 index.html.erb 本身(datepicker)中声明的部分。
我怎样才能保留 javascript 又保留 ajax 和快速界面?