Я использую js-формат от контроллера rails и js.erb, чтобы выполнить некоторые изменения html при отправке формы. В этом файле js.erb есть несколько операторов ruby if. Все частичные файлы извлекаются (в соответствии с вкладкой "Сеть Chrome") независимо от операторов if, являющихся истинными или ложными. Только правильные действия выполняются в html, но эти дополнительные действия js заставляют время составлять почти 1 секунду против 54 мс, если я удалю оператор if из действия. Мне интересно, есть ли способ, чтобы код 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
if(<%= @order_date == @order.order_start_date_time %>) {
// do something ...
} else {
// do something different ...
}
Вышеприведенный код будет запускать весь код на стороне клиента независимо от результата оператора (т.е. Делать что-то и делать что-то другое)
<% if @order_date != @order.order_start_date_time %>
// do this only
<% else %>
// do that only
<% end %>
Это запустит только один набор кода на основе оператора if (т.е. Только "сделать это только" или "сделать это только")