2015-04-27 49 views
1

我有一個new.html.twig,我在這個頁面上使用了很少的ajax調用來改變下拉的事件。如何在js文件中獲取路由路徑

因此,我創建了一個名爲new.js的分隔式js文件,並將所有JavaScript代碼保留在此文件中,而不是將其寫入同一視圖文件。

但是在這個js文件中,我無法訪問調用ajax請求的路由路徑。在變化事件。

===========New.twig.html===================== 
    include(new.js); 
    <select><name='a' onchange="setLabel('123')"></select> 
    ============new.js.=============   
    function setLabel(voucherTypeID) {   
    queryString = "voucherTypeID=" + voucherTypeID; 
    $('#loading-image').show(); 
    $.ajax({ 
    type: "POST", 
    url: "{{path('vouchergeneration_getLedgers')}}", //THIS PATH How TO GET 
    data: queryString, 
    cache: "false", 
    dataType: "html", 
    success: function (data){ 
    }); 

所以在這裏,我無法訪問URL路徑,而它可以在以前的樹枝文件中訪問。請指導我如何解決這個問題。我不想提前使用anykind捆綁的這個簡單的工作..謝謝..

回答

2

還有一旦這個包被啓用,你只需要做

這個簡單的工作 FOSJsRoutingBundle

很簡單捆綁

Routing.generate('my_route_to_expose', { id: 10 }); // will result in 
/foo/10/bar 

Routing.generate('my_route_to_expose', { id: 10, foo: "bar" }); // 
will result in /foo/10/bar?foo=bar 

$.get(Routing.generate('my_route_to_expose', { id: 10, foo: "bar" })); 
// will call /foo/10/bar?foo=bar 

Routing.generate('my_route_to_expose_with_defaults'); // will result 
in /blog/1 

Routing.generate('my_route_to_expose_with_defaults', { id: 2 }); // 
will result in /blog/2 

Routing.generate('my_route_to_expose_with_defaults', { foo: "bar" }); 
// will result in /blog/1?foo=bar 

Routing.generate('my_route_to_expose_with_defaults', { id: 2, foo: 
"bar" }); // will result in /blog/2?foo=bar 

編輯: 當然,你可以不用束(我不認爲這是一個好主意)。在這種情況下,我會建議您在控制器的操作中設置您的路線,並將其設置爲在樹枝模板中設置js變量。喜歡的東西:

控制器:

public function indexAction() 
{ 
    return array('yourRoute' => $router->generate('yourRoutName')); 
} 

您的模板:

<script type="text/javascript"> 
    var yourRoute = '{{yourRoute}}'; 
</script> 

您的JS:

(...) 
url: yourRoute, 
(...) 
+0

其實我在我的應用程序中到目前爲止還沒有使用任何類型的包。所以請你可以告訴我一些其他的方法來解決這個問題..沒有FOS路由軟件包 –

+0

檢查我的編輯,但我沒有看到避免捆綁點。 「Twig」,「Doctrine」等 - 這些都是捆綁包,所以你正在使用它。你爲什麼要重新發明輪子? –

+0

在控制器中生成路由並將其傳遞給Twig沒有任何實際的優勢。你可以在Twig中使用path()和url()函數。 – Gerry

1

若y OU要嵌入的URL,並與您的JS得到它,你可以不喜歡以下:

// HTML/Twig 
<html data-my-route="{{ path('vouchergeneration_getLedgers') }}"> 
    ... 
</html> 

然後在您的JS:

$.ajax({ 
    type: "POST", 
    url: $('html').attr('data-my-route'), 
    data: queryString, 
    cache: "false", 
    dataType: "html", 
    success: function (data){ 
}); 

它避免了全局變量,並且可以使用盡可能多的數據屬性,只要你想。

+0

我可以像這樣使用:

因爲我有5-6 ajax調用不同目的的相同的樹枝。取而代之的是我們可以只在一個樹枝文件中寫一個標籤.. –

+0

你可以根據需要添加任意數量的屬性;)如在 ..'。你明白嗎?順便說一下,如果可能的話,我建議你只有一個根據參數過濾結果的路由:) – Ninir