2011-11-18 24 views
7

Belirli bir işleve sahip bloklara sahip bir tür pano mini sitesi üzerinde çalışıyorum. Symfony2'yi kullanma Mekanımızda çekilen tüm görüntüleri gösteren html parçasını alan özel bir rota/instagramım var.Dinamik Javascript dosyaları için Twig kullanma

Bu bloğu her 10 dakikada bir yenilemek istiyorum. Bu nedenle, aşağıdaki javascript'i bir setTimeout işleviyle açıklığa kavuşturulmadan çalıştırmam gerekiyor.

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

Bu kod içindedir i birleştirme ve optimizasyon için Assetic üzerinden çalışmasını "KunstmaanDashboardBundle/Kaynaklar/kamu/js/instagram.js @".

{% 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 %} 

Bu çalışır, ancak bu optimal yaklaşım gibi i load() fonksiyonunda rotayı kodlamalısınız çünkü ben hissetmiyorum. Bunu düzeltmek için i Twig şablona instagram.js içeriği taşımak ve bunu değiştirmek gerekir:

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

Ama Assetic içeriği yararları gelen optimizasyon ve ayrılık kaybetmek bu şekilde. Ve özel kodumuz bu optimizasyona en çok ihtiyaç duyuyor.

Benim soru i instagram.js dosyasında yukarıdaki kodu koymak ve o iş :)

cevap

8

You yapabilirsiniz nasıl ben Twig ayrıştırıcı ile Assetic Javascript (ve bu konuda css) birleştirebilirsiniz olduğu şu anda Twig şablonlarının çıktısını Assetic ile işleyemiyor çünkü Assetic değerleri üretim için statik olarak dökerken, Twig şablonları çalışma zamanında işlenir.

Bu sorun için, FOSJsRoutingBundle numaralı rotayı kullanıp yönlendirmeyi ve istemci tarafında işlem yapabildiğinizden, JavaScript'inizin Assetic ile işlenmesini sağlayabilirsiniz.

+0

Bu mükemmel çalışıyor. Teşekkürler! – Roderik

0

bu mesaja How to use YUI compressor in Symfony2 routing/controller çözüm sayesinde bulduk:

$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'));