【问题标题】:How/where to create a shared method out of jquery/erb code?如何/在哪里从 jquery/erb 代码中创建共享方法?
【发布时间】:2011-12-18 03:50:43
【问题描述】:

在我的 rails 3.1 应用程序中,我添加了 update.js.erb、create.js.erb 和 destroy.js.erb 模板来处理 javascript 请求,并且一切正常。它们每个都有相似的代码块,需要调用这些代码块来更新 DOM 的某些部分。

...

// recalculate envelope total
$('#<%= "#{dom_id @transaction.envelope} .available" %>').html('<%= "#{formatted_money @transaction.envelope.amount_available}" %>');

我想封装这个逻辑,什么是 Rails Way 让这个更“DRY”?

我想象的是这样的:

<%= recalculate_envelope(@transaction.envelope) %>

但是我不知道这个方法应该去哪里,以便它被共享给每个模板,以及可能用于不同控制器的其他模板。就此而言,它甚至应该返回什么?

谢谢。

【问题讨论】:

    标签: javascript jquery ruby-on-rails coding-style erb


    【解决方案1】:

    你应该把方法放在一个辅助类中。如果您希望该方法可用于所有 vews(无论哪个控制器),您必须将它放在类 ApplicationHelper 中。对于特定助手类中特定控制器的视图(例如,ProfileHelper 使该方法对 ProfileController 的所有视图可见)。

    所以在你的帮助类中你可以实现你的方法,例如:

    class ApplicationHelper
      def recalculate_envelope(dom_id, envelope)
        "$('##{dom_id envelope} .available').html('#{formatted_money envelope.amount_available}');"
      end
    end
    

    然后你可以在你的视图中访问你的方法

    <%= recalculate_envelope(@transaction.envelope) %>
    

    【讨论】:

    • 谢谢!我没有意识到它这么简单,但我想这就是 HTML 模板的帮助器的工作方式,那么为什么不也适用于 js 呢?
    猜你喜欢
    • 2014-11-23
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多