2016-09-26 102 views
-4

我看到很多例子給<script>標籤分配了枝條到JS變量,所以我決定在click事件裏面調用枝條函數,但是不幸的是,點擊或者沒有,它仍然執行TWIG代碼。Symfony2 - 執行TWIG裏面的JS事件

$(document).ready(function() { 
    $('#sign_up_trainee .btn-social').click(function() { 
     {{ app.session.set('name', 'value1') }} 
    }); 
    $('#sign_up_company .btn-social, #sign_up_university .btn-social').click(function() { 
     {{ app.session.set('name', 'value2') }} 
    }); 
}); 

最後當頁面加載時,它正在執行樹枝,會話名稱'name'被設置爲'value2'。 Twig被渲染的方式早於JS被執行。任何想法如何正確執行JS內的樹枝?

+3

你所要做的是不可能的,因爲你自己說的'twig'呼叫控制器在'JS'之前執行,因此只能將評估函數傳遞給'JS'並將它們存儲在一個變量中。如果你想執行一些'twig',你需要通過ajax調用控制器來做到這一點 – DarkBee

+0

這看起來像一個解決方案。你能把它作爲答案張貼,所以我可以確認它是正確的答案? –

回答

0

正如你自己說的twigJS之前執行。 Twig本身被編譯成PHP,因此在離開服務器之前被解釋。

您唯一可以傳遞給JS本身的方法是評估方法並將它們存儲爲變量,也就是說,如果將它們放在twig文件中,例如:

<script> 
    var current_date = '{{ "now" | date('d-m-Y') }}'; 
</script> 

執行twig方法,並得到適當的反應,唯一正確的方法是用Ajax調用

2

你誤解了樹枝的用途。 Twig是templating language

這意味着它在將輸出發送到瀏覽器之前在服務器上運行。在返回之前,您可以使用它來模擬一些JS。

如果使用正確(在xxx.js.twig文件上運行模板),則根本不會在客戶端瀏覽器的文件中出現「代碼」。