2012-06-22 15 views
5

私はAJAX要求を行うためにJQueryを使用しているシンプルなピラミッドアプリケーションを開発しています。私は今まで私のカメレオンのテンプレートの中に私のJavaScriptコードを持っていた。今私は、別の場所(例えば、静的リソース)に自分のjavascriptを抽出したい。カメレオンのjavascriptファイル用テンプレート?

私の問題は、私は私のjavascriptのコードが動的に生成されるコンテンツので、同じように依存している見つけることです:

$.post("${request.route_url('my_view')}",{'data': 'some data'}, function(html){ 
    $("#destination").html(html); 
}); 

動的な要素ビーイング:requestオブジェクトのroute_urlメソッドを呼び出している

"${request.route_url('my_view')}" 

テンプレート内で

このようなjavascriptファイルを独自のテンプレートに分離し、それらのルートとビューを提供するための認識されたパターンはありますか?または単にページテンプレートにjavascriptを保持しますか?

答えて

9

はい、拡張ルートなどのコンテキスト固有の情報をテンプレートに入れ、静的なJavaScriptライブラリからこの情報にアクセスします。

  1. あなたが生成されたHTML内のタグにデータ属性を使用できます:

    <body data-viewurl="http://www.example.com/route/to/view"> 
        ... 
    </body> 
    

    あなたは、コンテキスト情報は、味に応じて、さまざまな方法で行うことができます含める

    、あなたの静的なJSコードのロードで

    var viewurl = $('body').data('viewurl'); 
    
  2. は、ドキュメントヘッド内のリンクを含むように作らアップLINK tag関係を使用し:$('link#viewurl').attr('href')、又は$('link[rel=ajax-datasource]').attr('href')を使用して取得することができる

    <head> 
        <link rel="ajax-datasource" id="viewurl" 
          href="http://www.example.com/route/to/view" /> 
        ... 
    </head> 
    

    。これは実際にはURL情報でのみ機能します。

  3. はあなたの静的コードから参照できるように、まっすぐに自分のテンプレートにJS変数を生成します。

    <head> 
        ... 
        <script type="text/javascript"> 
         window.contextVariables = { 
          viewurl = "http://www.example.com/route/to/view", 
          ... 
         }; 
        </script> 
    </head> 
    

    と、これらの変数はcontextVariables.viewurlで直接参照可能です。

+0

偉大な答え、ありがとう。 –

+0

私がベストを尽くしているように私はオプション2に行きました。 –

関連する問題