0

私たちのアプリケーションには、Railsアプリケーションを実行している5つのWebサイトに共通のコードを提供するgemがあります。ファイル内のgemにlib/theme/controller_module.rbは、次のコードが含まれています。

def application_javascripts(*items)
  @application_javascripts ||= []
  @application_javascripts += items
end

ファイル内のgemにhelpers/theme_helper.rbは、次のコードが含まれています。

def application_js_include_tag
  if @application_javascripts
    javascript_include_tag( *@application_javascripts)
  end
end

テーマの宝石は、各アプリケーションのにありGemfileます。コントローラコードとヘルパーではapplication_javascripts、ページで使用されているページ固有のJavaScriptを追跡するために実行されapplication_js_include_tag、ビューの下部に配置されて、それらのいくつかのファイルのみが使用可能になります。

残念ながら、@application_javascriptsビューのレンダリングが開始されると、ビューの値は更新されないようです。ヘルパーで発生する追加は、ページの下部で実行された@application_javascriptsときにビューで使用できません。そこで定義された変数のapplication_js_include_tagような別のヘルパーが必要で、両方をで使用しますか?または他の解決策?application_javascriptsapplication_js_include_tag

4

1 に答える 1

0

その動作から、@application_javascriptsレンダリングの開始時にのスナップショットが作成されているように見えます。レンダリング中に実行しても、ビューで使用可能なcontroller.application_javascriptsの値は変更されません。@application_javascriptsで定義するhelpers/theme_helper.rb

def application_javascripts(*items)
  controller.application_javascripts(*items)
end

また、値は変更されません。@application_javascripts動作するのは、ヘルパーファイルに常駐するコードによって変更されるようにコードを複製することです。helpers/theme_helper.rbコントローラコードの複製で定義する:

def application_javascripts(*items)
  @application_javascripts ||= []
  @application_javascripts += items
end

正常に動作します。

于 2013-01-31T18:58:43.187 に答える