【问题标题】:Rendering a different Javascript file in respond_to在 respond_to 中呈现不同的 Javascript 文件
【发布时间】:2011-04-02 03:09:27
【问题描述】:

我陷入了一个(显然)简单的问题。 在我的 event_controller 我有 i_like_it 动作:

  def i_like_it
    @event = Event.find(params[:id])

    ... # logic

    respond_to do |format|
      format.js
    end
  end

在我的例子中,“i_like_it”是用 :method => PUT 调用的(它是一个 Ajax 调用,“i_like_it.js.erb”将作为脚本返回,它将是 在浏览器上执行。)

我想渲染一个不同名称的 Javascript 文件(不是 i_like_it.js.erb) ,但我在 Rails API 中没有找到任何选项 文档。

respond_to do |format|
  format.js { render ??? }
end

Rails 可以使用 :js 选项渲染原生 JavaScript,但 我不想要 在控制器中使用 Javascript

你有什么建议吗?

谢谢你, 亚历山德罗 DS

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby


    【解决方案1】:

    尝试render :template => 'your_file_here' 而不是

    respond_to do |format|
      format.js
    end
    

    render 的文档还描述了其他几个选项。

    【讨论】:

      【解决方案2】:

      如果你这样做:

      respond_to do |format|
        format.js { render :action => "different_action" }
      end
      

      它将改为加载 RAILS_ROOT/app/views/your-controller/different_action.js.erb。

      format.js 块只是确保如果它是一个 .js 请求,则默认情况下您设置了正确的标头,并且默认情况下它会查找 .js.erb 或 .js 而不是 .html.erb。

      您还可以使用 render :file 来渲染文件系统上恰好包含 JS 的任意文件,或者您可以使用任何渲染的其他常用选项。 There are a few of them.

      【讨论】:

      • 在我的情况下,我必须渲染一个不同控制器的 js 文件,然后渲染 :template => 'my_file' 更合适,谢谢,Alessandro DS
      • 如果我想渲染另一个控制器的 my_javascript.js.erb?
      • 如何调用不同文件夹中的文件,例如与控制器无关的共享文件夹?相对路径从哪里开始,你能举一个例子吗(例如 root/app/views/shared/vote.js.erb)?
      • render action: "shared/vote"。虽然,从 Rails3 开始,您只需要执行render "shared/vote"。 :action 键非常常见,以至于将其设为默认键。
      猜你喜欢
      • 2016-06-18
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 2023-03-20
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多