7

特定の機能を備えたブロックを備えた一種のダッシュボードミニサイトに取り組んでいます。symfony2を使用して、私たちの会場で撮影されたすべての画像を示すhtmlフラグメントを取得する専用ルート/instagramがあります。

このブロックを10分ごとに更新したいので、わかりやすくするために省略したsetTimeoutを使用して、次のjavascriptを関数で実行する必要があります。

jQuery('.gallery').load("/instagram", function() {
    jQuery('.gallery').cycle({
        fx: 'fade'
    });
});

このコードは「@KunstmaanDashboardBundle/ Resources / public / js / instagram.js」にあり、連結と最適化のためにAsseticを介して実行します。

{% javascripts
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery-1.7.min.js'
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery.cycle.lite.js'
    '@KunstmaanDashboardBundle/Resources/public/js/*'
    filter='closure'
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}

これは機能しますが、load()関数でルートをハードコーディングする必要があるため、これが最適なアプローチであるとは思いません。これを修正するには、instagram.jsのコンテンツをTwigテンプレートに移動し、次のように変更する必要があります。

jQuery('.gallery').load("{{ path('KunstmaanDashboardBundle_instagram') }}", function() {
    jQuery('.gallery').cycle({
        fx: 'fade'
    });
});

しかし、このようにして、Asseticのコンテンツの利点からの最適化と分離を失います。そして、私たちのカスタムコードは、この最適化を最も必要としています。

だから私の質問は、Assetic Javascript(そしてそのことについてはcss)をTwigパーサーと組み合わせて、上記のコードをinstagram.jsファイルに入れて機能させるにはどうすればよいですか:)

4

2 に答える 2

8

Twigテンプレートは実行時に処理されるのに対し、Asseticはアセットを静的に本番用にダンプするため、現在、AsseticでTwigテンプレートの出力を処理することはできません。

この問題では、FOSJsRoutingBundleを使用してルートを公開し、クライアント側で処理できる場合があります。その後、JavaScriptをAsseticで処理できます。

于 2011-11-18T10:27:11.793 に答える
0

この投稿のおかげで解決策を見つけましたSymfony2ルーティング/コントローラーでYUIコンプレッサーを使用する方法

    $response = $this->renderView('template.html.twig');

    $path = $this->container->getParameter('kernel.root_dir');
    $ac = new \Assetic\Asset\StringAsset($response , array(new \Assetic\Filter\Yui\JsCompressorFilter($path . '/Resources/java/yuicompressor-2.4.7.jar')));

    $compressJS = $ac->dump();
    return new Response($compressJS, 200, array('Content-Type' => 'text/javascript'));
于 2013-04-11T11:23:19.150 に答える