2011-11-18 8 views
7

मैं एक प्रकार की डैशबोर्ड मिनी साइट पर काम कर रहा हूं जिसमें एक निश्चित कार्यक्षमता वाले ब्लॉक हैं। Symfony2 का उपयोग करना मेरे पास एक समर्पित मार्ग/इंस्टाग्राम है जो एक HTML खंड प्राप्त करता है जो हमारे स्थान पर ली गई सभी छवियों को दिखाता है।गतिशील जावास्क्रिप्ट फ़ाइलों के लिए ट्विग का उपयोग

मैं हर 10 मिनट में इस ब्लॉक को रीफ्रेश करना चाहता हूं, इसलिए मुझे स्पष्टता के लिए छोड़े गए सेटटाइमआउट वाले फ़ंक्शन में निम्न जावास्क्रिप्ट चलाने की आवश्यकता है।

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

इस कोड में है "@ KunstmaanDashboardBundle/संसाधन/सार्वजनिक/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 %} 

यह काम करता है, लेकिन मैं महसूस नहीं की तरह यह सर्वोत्कृष्ट दृष्टिकोण है क्योंकि मैं लोड() फ़ंक्शन में मार्ग हार्डकोड करने की है। इसे ठीक करने के मैं टहनी टेम्पलेट को instagram.js सामग्री को ले जाने और करने के लिए इसे बदलने की जरूरत है:

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

लेकिन इस तरह से मैं Assetic की सामग्री के लाभ से अनुकूलन और जुदाई खो देते हैं। और हमारे कस्टम कोड को इस अनुकूलन की सबसे अधिक आवश्यकता है।

तो मेरी सवाल है, मैं कैसे टहनी पार्सर के साथ Assetic जावास्क्रिप्ट (और उस बात के लिए सीएसएस) गठजोड़ कर सकते हैं तो मैं instagram.js फ़ाइल में उपरोक्त कोड डाल दिया और यह काम :)

उत्तर

8

आप कर सकते हैं वर्तमान में एसेटिक के साथ ट्विग टेम्पलेट्स के आउटपुट को संसाधित नहीं कर सकता क्योंकि एसेटिक उत्पादन के लिए स्थैतिक रूप से परिसंपत्तियों को डंप करता है जबकि टवीग टेम्पलेट्स को रनटाइम पर संसाधित किया जाता है।

इस समस्या के लिए आप मार्ग का पर्दाफाश करने और इसे क्लाइंट पक्ष को संसाधित करने के लिए FOSJsRoutingBundle का उपयोग करने में सक्षम हो सकते हैं, तो आपकी जावास्क्रिप्ट को एसेटिक के साथ संसाधित किया जा सकता है।

+0

यह पूरी तरह से काम करता है। धन्यवाद! – Roderik

0

मैं इस पोस्ट How to use YUI compressor in Symfony2 routing/controller का हल धन्यवाद पाया है:

$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')); 
संबंधित मुद्दे