4

I am currently working on cleaning up a little web app I've written in Mojolicious. As part of that cleanup I am separating out my javascript into the public directory from my html.ep files.

The problem I have though is I don't seem to be able to reference tag helpers any more, like 'url_for' or even referencing values in the stash such as '<% $stashvalue %>'.

Any idea's on how or if I can do this is very much appreciated.

cheers.

4

2 に答える 2

5

ディレクトリ内のものはpublic静的に、最適にはMojoliciousPlackによってではなく、Webサーバーによって提供されるため、ファイルはによって処理されないためMojolicious<% $stashvalue %>何の意味もありません。

解決策は、サーバー側の変数にアクセスする必要のあるjavascriptの部分を、mojoテンプレートに埋め込むことです。かなり醜いですが、記述するコードは少なくなります。

もう1つは、JavaScriptファイルがロードされたときにajax呼び出しを行い、サーバーから送信された値を取得することです。よりエレガントですが、より多くのコードを記述する必要があります。

私が考えることができるもう1つの方法は、これらのjavascriptファイルを、処理されるフォルダーの下に移動し、Mojoliciousパラメーター化して含めることです-html.epそのjsファイルを必要とするファイルに次のようにします。

<script type="text/javascript" src="http://example.com/url/served/by/mojo/?param1=<% $stashvalue %>&param2=<% $stashvalue2 %>"></script>

そして、に応答するコントローラーで、/url/served/by/mojo/そのjsファイルをレンダリングし、パラメーターをクエリのパラメーターに置き換えます。別の方法として、これらのパラメータをsession

通常のPerlと同様に、これを行うには複数の方法があります。

于 2013-03-10T16:50:19.557 に答える
4

私が通常行うことは、ほとんどのjavascriptを関数呼び出しにカプセル化するか、オブジェクトを純粋なjavascriptファイルにカプセル化することです。次に、テンプレートにこれらの純粋なjavascriptファイルを含め、テンプレートからこれらのファイルに組み込んだapiを使用して、サーバー側の変数を関数の引数に補間します。ガリレオのコードを熟読して、いくつかの例を見ることができます。

たとえば、このテンプレートがこの純粋なjavascriptファイルの機能にstash値を渡す方法をご覧ください。

于 2013-03-10T22:34:10.310 に答える