簡體   English   中英

[Symfony +樹枝]

[英][Symfony + Twig]

我有基本模板(base.html.twig),其中包含動態生成的js的鏈接:

 <script type="text/javascript"> <script type="text/javascript" src="{{ path('renderJs') }}"></script> </script> 

和Action呈現此JS:

/**
     * @Route("/scripts.js",
     *  name="renderJs")
     */
    public function renderJsAction(Request $request)
    {
        return new Response(
            $this->renderView(
                "AcmeBundle:Default:renderJs.js.twig",
                array('foo' => 'bar')
            ),
            200,
            array('Content-Type' => 'text/javascript')
        );
    }

但是我想使用與基本模板相同的Twig上下文渲染JS(renderJs.js.twig中的變量與base.html.twig中的變量相同)。 那可能嗎? 任何想法如何處理這個問題?

這是一切工作的方式(據我了解):

  1. base.html.twig呈現,將renderJS操作路線的URL放入腳本標記的源
  2. 用戶瀏覽器將加載生成的頁面,並在腳本標簽中找到renderJS操作的URL,然后向服務器發出另一個請求以獲取該URL。

因此,在這種情況下有兩個請求:一個請求獲取base.html.twig渲染,另一個請求獲取renderJS URL給出的腳本文件。 到服務器收到第二個請求時,第一個請求的上下文已消失。

我可以想到兩個選擇。 選項1是重新生成上下文(理想情況下,通過在兩個地方都設置一些類或方法來進行創建)。 如果您希望對javascript文件有第二個請求(例如是否可以緩存),並且生成上下文不是很耗資源,那很好。

選項2是跳過對操作的需要,並在base.html.twig模板中將render.js.twig模板包括在內嵌javascript中。 如果上下文的創建確實非常昂貴並且javascript很輕並且永遠不會被緩存,那可能只是一個好主意(但是最好讓文件盡可能多地被緩存)。

讓我知道它們的發音以及它們如何適用於您,我可以深入了解更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM