我正在使用rails控制器和js.erb视图中的js格式在提交表单时执行一些html更改。在这个js.erb文件中,有多个ruby if语句。无论if语句是true还是false,都会检索所有部分(根据Chrome Network选项卡)。只有在html中执行了正确的操作,但如果我从操作中删除if语句,这些额外的js操作会导致时间接近1秒vs 54 ms。我想知道是否有一种方法可以在满足适当条件时运行js代码。感谢。
js.erb文件
$("#edit_time_modal_<%= @order.id %>").modal("hide");
<% new_time = @order.order_start_date_time %>
<% if @order_date != @order.order_start_date_time %>
<% end_of_day = Time.zone.now.end_of_day %>
<% if @order_date < end_of_day && new_time < end_of_day %>
$("#order_details_<%= @order.id %>").replaceWith('<%= j(render 'order_details', todays_order: @order) %>');
$("#dashboard_orders_table").replaceWith('<%= j(render 'orders_table') %>');
$("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
$(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
<% elsif @order_date < end_of_day && new_time > end_of_day %>
$("#dashboard_order_row_<%= @order.id %>").remove();
$("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
$("#tom_orders").replaceWith('<%= j(render 'tom_orders') %>');
$("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
$(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
$("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
<% elsif @order_date > end_of_day && new_time < end_of_day %>
$("#tom_order_<%= @order.id %>").remove();
$("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
$("#dashboard_orders_table").replaceWith('<%= j(render 'orders_table') %>');
$("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
$(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
$("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
<% elsif @order_date > end_of_day && new_time > end_of_day %>
$("#tom_orders").replaceWith('<%= j(render 'tom_orders') %>');
$("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
$("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
<% end %>
<% end %>
$("#edit_time_modal_<%= @order.id %>").replaceWith('<%= j(render 'edit_time', order: @order) %>');
控制器操作
def update_order_time
@order = Order.find(params[:order_id])
if params[:extras].present?
@order.update_attributes(...)
else
@order.update_attributes(...)
end
@order_date = params[:order_date]
if Order.tomorrows_orders.present?
@tomorrows_orders = Order.tomorrows_orders.order(:order_start_date_time)
elsif Order.day_after_tom_orders.present?
@tomorrows_orders = Order.day_after_tom_orders.order(:order_start_date_time)
elsif Order.three_days_orders.present?
@tomorrows_orders = Order.three_days_orders.order(:order_start_date_time)
elsif Order.four_days_orders.present?
@tomorrows_orders = Order.four_days_orders.order(:order_start_date_time)
else
@tomorrows_orders = []
end
respond_to do |format|
format.js
end
end
答案 0 :(得分:0)
if(<%= @order_date == @order.order_start_date_time %>) {
// do something ...
} else {
// do something different ...
}
上面的代码将在客户端运行所有代码,无论if语句结果如何(即两者都做了什么并做了不同的事情)
<% if @order_date != @order.order_start_date_time %>
// do this only
<% else %>
// do that only
<% end %>
这将只基于if语句运行一组代码(即仅“仅执行此操作”或“仅执行此操作”)