0

私のアプリケーション構造は次のようになります

myapp
  app/assets/javascripts/admin/admin.js
  app/controllers/admin/admin_controller.rb
  app/views/admin/new.html.haml
  app/views/admin/new.js.haml

フォーム内の特定のコンテンツをレンダリングするために、いくつかのajax関数を使用しています。指定されたアクションnew.js.hamlは、呼び出しがjs形式の場合にトリガーされます。私のadmin.jsファイルには、このajax呼び出しの後に含まれていない他のスクリプトもいくつかあります。スクリプトをコピーしてnew.js.hamlに貼り付けると、すべて正常に機能します。ただし、アプリに冗長なスクリプトを含めたくありません。これをリファクタリングする方法は?

4

1 に答える 1

1

コードを複製するのは得策ではないという点で正しいです。javascriptファイルをどこに置くかというあなたの質問に関しては、それは実際には重要ではありません(ただし、通常、あなたの質問の範囲を超えた理由で、それらはに存在しますapp/assets/javascripts)。

重要なのは、呼び出し元のjavascript関数new.js.hamlが実際に定義されていることです。つまり、javascriptファイルをロードする必要があります。これは、次のように、レイアウトのにjavascriptファイルを含めることで実行できます。

<%= javascript_include_tag "admin/admin" %>

メインのJavaScriptファイルで関数を定義します。

// admin.js

var testFunc = function() {
  console.log('this is a test!')
};

次に、new.jsファイルで関数を呼び出します。

// new.js

testFunc();

関数や変数を再定義する必要はありません。

于 2013-03-27T09:20:28.597 に答える