2012-04-22 7 views
0

私のアプリには、必要なすべてのJSファイル(私のスクリプト、Twitter Bootstrapなどのライブラリ)が含まれています。JSファイルをAJAXと呼ばれるページに自動的に配置する方法は?

問題は、AJAX経由で呼び出されるリクエストがあると、呼び出されたページにJSファイルが含まれていないため、アプリケーションに組み込まれているので呼び出されたページに含める必要があります。

例:my_scripts.jsには多くのJS機能が含まれています。

...some content of this file.. #here doesn't work the functions from the file "my_scripts.js" 

/views/articles/_create_new.html.haml

AJAX

を介して呼び出さページへのリンク
<a href="/articles/create_new" data-remote="true>Create New Article</a> 

私は/views/articles/_create_new.htmlに入れたときにこのリンク

= javascript_include_tag "my_scripts" 
...some content of this file.. 

であるので、 /views/articles/_create_new.html.haml JS機能が動作します。

私はどのような方法を存在する場合、どのように自動的に常にAJAXページにJSファイルが含まれているための良い方法ではありません、私のすべての単一のAJAXページ内のすべてのJSファイルを置くために、お聞きしたいと思い

...

おかげ

私は3つの方法のいずれかでこれを達成するであろう

答えて

1

RequireJSまたは$criptのようなスクリプトローダーを使用してください。

あなたのページには2つのことも返信してください:読み込むコンテンツとスクリプト。これは次のようにJSONを使用したベストです:

{ 
    "content" : "content here", 
    "scripts" : ["an","array","of","script","urls"] 
} 

データが返されるときに、コンテンツを解析し、ペイントした後、スクリプトをロードするためのスクリプトローダを使用しています。実際には、独自のスクリプトローダを作成することができます。 <script>タグを動的に作成し、<head>に入れてsrc

のタグを付けてください
1

http://api.jquery.com/load/から

jQueryの

スクリプト実行末尾に セレクタ式がないURLを使用して.load()を呼び出すと、スクリプト が削除される前にコンテンツが.html()に渡されます。これにより、スクリプトブロックが実行されてから が破棄されます。ただし、セレクタ式をURLの に追加して.load()を呼び出すと、DOMが に更新される前にスクリプトが取り除かれ、実行されません。両方の例の例は、 以下のようになります。

ここで、ドキュメントの一部として#aにロードされたJavaScriptは、 が正常に実行されます。

$('#b').load('article.html #target');

基本的には、次のことができます。ただし、以下の場合には、#Bにロードされているドキュメント内のスクリプト ブロックが取り除かれない 実行され

$('#a').load('article.html');

JSリファレンスをAjaxリクエストによって返されたHTMLに追加すると、jQueryがそれらを実行します。

{ 
    html: '<p>stuff</p>', 
    scriptRefs: [ 'js/one.js', 'js/two.js' ] 
} 

私はその後を反復処理になります、ストレートHTMLを返すも、スクリプト参照の配列が含まれているJSONバンドルの一部としてHTMLを返すのではなく

RequireJSやまね

scriptRefs配列にはRequireJSのようなものがあります。

ちょうど正直なところ、ベースページ

にコードを追加し、私はこれを行う可能性が高いです。

関連する問題