【问题标题】:How to load a custom js file with a controller?如何使用控制器加载自定义 js 文件?
【发布时间】:2015-03-24 15:58:20
【问题描述】:

如果我关注user_create_path,如果我使用此代码,将运行文件“views/users/create.js.erb”:

users_controller.br

def create
  #...
  respond_to do |format|
    format.html { redirect_to root_path }
    format.js
  end
end

如何有条件地加载不同的js文件?

我正在考虑这些方面的一些事情:

def create
  #...
  if User.all.count < 50
    respond_to do |format|
      format.html { redirect_to root_path }
      format.js { create_a.js.erb }
    end
  else
    respond_to do |format|
      format.html { redirect_to root_path }
      format.js { create_b.js.erb }
    end
  end
end

【问题讨论】:

  • 你试过了吗?结果如何?
  • @Beartech 哦,我刚刚写了这段代码来展示我想要做什么。你是说它可能真的有用吗?
  • 它只是按照你说的去做,我看不出有什么明显的原因。但我从未尝试过。您可能必须使用render 方法,但请尝试一下。不能伤害任何东西。关于 Ruby 和 Rails 的一件事是,我发现自己只是在尝试看起来应该可行的东西,而且它们确实可行!
  • @Beartech +1,使用 Rails,如果您正在考虑一种可能有用/易于使用的功能,那么可能有人在您之前就有这种需求并将其作为内置在 Rails 功能或 gem 中。

标签: javascript ruby-on-rails ruby controller


【解决方案1】:

也许你应该根据条件运行不同的js?

users_controller.rb

def create
  respond_to do |format|
    format.html { redirect_to root_path }
    format.js { @users_count = User.all.count }
  end
end

create.js.erb

<% if @users_count < 50 %>
  alert('a');
<% else %>
  alert('b');
<% end %>

【讨论】:

  • +1 !除此之外,create.js.erb 可以只保存逻辑(if/else 块)并调用其他文件,如render 'create_a.js.erb'。所以create.js.erb 将是一个包含逻辑并根据逻辑呈现适当文件的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多