【问题标题】:How to use Rails helpers in coffeescript js如何在咖啡脚本 js 中使用 Rails 助手
【发布时间】:2012-07-10 15:35:34
【问题描述】:

我不太了解帮助程序在视图/控制器中的工作方式。我从来没有用过。

我的具体问题是:我几乎所有的视图都实现了 AJAX。在我的大多数控制器中,update.js.coffeecreate.js.coffee 具有以下代码的某种形式:

jQuery ->
  <% if @product.errors.any? %>
  error_info = '<%= j(render :partial => "shared/errors", :locals => { :record => @product }) %>'
  popup error_info

  <% else %>
.
.
.

popup 是一个显示某些元素的 javascript 函数。

有没有办法把它抽象成一个助手?做这个的最好方式是什么?这段代码在每种情况下几乎完全相同,除了 @product 的 2 次使用当然会根据所讨论的模型而有所不同。

如果这不是助手的用途,那么 1) 它们的用途是什么?和 2) 我应该改用什么?

编辑:奖励问题:实际上,我的许多新功能、创建功能、编辑功能和更新功能在各个模型中都是相似的。你怎么把它弄干?还是你不担心?

【问题讨论】:

    标签: javascript ruby-on-rails coffeescript helpers


    【解决方案1】:

    第一步是将文件的扩展名更改为.js.coffee.erb。这让资产管道知道您希望使用 ERB 解释文件。

    第二个可选步骤是向 Sprokets 添加自定义帮助程序,以便您可以从 Coffee 脚本文件中调用自己的方法*。只需创建一个新的帮助模块,然后在初始化程序中注册它:

    Sprockets::Context.send :include, CoffeeHelper
    

    *:资产将无法访问您习惯使用的所有帮助程序,因为 ERB 是在编译资产时运行的,而不是作为 HTTP 请求的一部分。正常的控制器/助手设置不存在。

    【讨论】:

      【解决方案2】:

      如果您想将此代码重构为 rails 帮助器,它可以像任何其他帮助器方法一样完成,您必须将所有 javascript 代码作为字符串,并且您的 rails 帮助器需要返回一个字符串。

      Rails 助手可以帮助重构视图中的逻辑,这样您就可以尽可能地保持代码逻辑较少,并且可以让重复的代码更加枯燥。

      如果您发现某些代码在您的模型中重复出现,您还可以考虑将该代码重构为 lib 目录中的 ruby​​ 模块,并将该模块包含到您的模型中。

      【讨论】:

      • 感谢您的信息。助手返回的字符串是带有 erb 的 javascript,对吗?既然是咖啡,那么返回的字符串是否需要换行符和双倍行距的缩进才能正常工作?
      猜你喜欢
      • 2015-01-02
      • 2012-04-27
      • 2011-11-08
      • 1970-01-01
      • 2019-05-02
      • 2018-05-26
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多