твиг и джаваскрипт

я создаю страницу, которая показывает диаграмму в зависимости от типа, выбранного в поле со списком

<div id="chartdiv"></div>

<select name="graphe" id="identifiantDeMonSelect">
<option value="Column2D">Column2D
<option value="Column3D">Column3D
<option value="Pie3D">Pie3D
<option value="Pie2D">Pie2D
</select>
<input type="submit" value="Afficher" onclick="ajax()">


<script type="text/javascript">
function ajax(){
    var xhr

    if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xhr !=null)  {
    xhr.onreadystatechange = function() { type1(xhr); };
    xhr.open("GET", "{{ path('Ajax')}}", true);
    xhr.send(null);
    } else {

     alert("The XMLHttpRequest not supported");

  }}

function type1(xhr){
            var docXML= xhr.responseText;
            var val_type = getSelectValue('identifiantDeMonSelect');
            var type = val_type+"";
            var str="{{ asset('Charts/Pie2D.swf') }}";
            var chart = new FusionCharts(str, "ChartId", "600", "400", "0", "0");
            chart.setXMLData(docXML);                               
            chart.render("chartdiv");
            }
function getSelectValue(selectId)
{
    var selectElmt = document.getElementById(selectId);
    return selectElmt.options[selectElmt.selectedIndex].value;
}

</script>

Теперь, когда я просто заменяю var str="{{ asset('Charts/Pie2D.swf') }}"; на "{{asset('Charts/'+type+'.swf') }}" для динамического изменения типа диаграммы, я получаю следующую ошибку symfony: "Variable "type" does not exist in ". И когда я помещаю "{{ asset('Charts/"+type+".swf') }}" (я просто заменил 'на "), я получаю страницу, и когда я нажимаю кнопку отправки, ничего не происходит, и внутри консоли (консоли Chrome) я получаю эту ошибку "GET http://127.0.0.1:8888/dashboard2/Symfony/web/Charts/&quot;+type+&quot;.swf 404 (Not Found)". Он принимает ее как есть &quot;+type+&quot ; Очевидно, мне нужна помощь, я не знаю, проблема ли это в конкатенации или это как-то связано с веткой и функцией актива. Заранее спасибо


person MarGa    schedule 09.10.2012    source источник


Ответы (1)


Я думаю, это невозможно. вы не можете смешивать javascript vars с twig, потому что один клиент, а другой сервер.

Вместо использования {{asset}} здесь вы можете создать маршрут для извлечения вашего актива и использовать функциональность актива в действии. затем вы можете использовать это: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle

или дешевый обходной путь, подобный этому:

route = "{{ path('myassetroute', { 'pie': "PLACEHOLDER" }) }}";
route = route.replace("PLACEHOLDER", type);
person ivoba    schedule 09.10.2012
comment
Большое спасибо :) ну, я бы назвал это умным способом ведения дел, а не дешевым обходным путем. - person MarGa; 09.10.2012