Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何/在何处使用jquery/erb代码创建共享方法?_Javascript_Jquery_Ruby On Rails_Coding Style_Erb - Fatal编程技术网

Javascript 如何/在何处使用jquery/erb代码创建共享方法?

Javascript 如何/在何处使用jquery/erb代码创建共享方法?,javascript,jquery,ruby-on-rails,coding-style,erb,Javascript,Jquery,Ruby On Rails,Coding Style,Erb,在我的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

在我的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}" %>');
。。。
//重新计算信封总数
$('#').html('');
我想封装这个逻辑,Rails是如何让它更“干燥”的

我想象的是这样的:

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

但我不知道这个方法应该放在哪里,这样它就可以共享给每个模板,也可以共享给不同控制器的其他模板。就这一点而言,它甚至应该返回什么


谢谢。

您应该将该方法放入helper类中。如果希望该方法可用于所有VEW(无论哪个控制器),则必须将其放入类
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也不这样呢?