2012-07-03 4 views
0

Я использую аннотации для моей маршрутизации. В моем index.twig шаблона я написал несколько JQuery какSymfony2 Маршрутизация Аннотации и JavaScript

$(document).ready(function(){ 
    $('#sortable').NestedSortable(
     { 
      accept: 'sort', 
      noNestingClass: "no-children", 
      helperclass: 'helper', 
      autoScroll: true, 
      onChange: function(serialized) { 
      }, 
      onStop : function(){ 
       var element_id = $(this).attr("id"); 
       var parent_id = $(this).parent().attr("id"); 
       var prev_sibling_id = $(this).prev().attr("id"); 
if(prev_sibling_id=='trash'){ 
    var data = {PID:element_id}; 
    $.ajax({ 
     type: "POST", 
     data: data, 
     url:"{{ path('v2_pm_patentgroups_trash') }}", 
     cache: false, 
     success: function(data) { 
      document.location.reload(true); 
     }); 
} 
else if(parent_id=='sortable'){ 
    var p_sibling = $(this).prev().attr("value"); 
    if(p_sibling == null){var p_sibling = 0;} 
    var n_sibling = $(this).next().attr("value"); 
    if(n_sibling == null){var n_sibling = 0;} 
    var order = (p_sibling + n_sibling)/2; 
    var data = {ID:element_id, ORD:order}; 
     $.ajax({ 
     type: "POST", 
     data: data, 
     url:"{{ path('v2_pm_patentgroups_sortgroups') }}", 
     cache: false 
     }); 
} 

Теперь вы видите, есть два Аякс callsone вызывается, когда группа громится и другая вызываются, когда группа сортируются.

Группа является литий тег, который находится в моем файле веточку

<li id="{{ portfolio_group.id }}" class="sort group" value={{ portfolio_group.order }}> 
    <span class="drag-image groupimage">&nbsp;</span> 
    <a class='expand'>{{ portfolio_group.name }}</a> 
    <a class="button3" href="{{ path('v2_pm_patentgroups_edit', { 'patentgroupId': portfolio_group.id }) }}" ><span> Edit </span></a> 
      <a class="button3" href="{{ path('v2_pm_patentgroups_delete', { 'patentgroupId': portfolio_group.id }) }}" ><span> Delete </span></a> 
    <hr class="separator"> 
</li> 

Может кто-нибудь giude меня, как дать путь к URL из My внутри моей JS. Я не хочу использовать файл маршрутизации.

Благодаря

ответ

2

Когда мне нужно передать данные из контроллера/зрения на JavaScript я обычно набор данных атрибутов на соответствующие HTML-теги. Например, если мне нужен маршрут для запроса AJAX Напишу:

<a href="#updateTarget" class="ajaxTrigger" data-ajax-route="{{ path('my_ajax_route') }}">click here for ajax</a> 

, а затем получить доступ к нему с:

$('.ajaxTrigger').on('click', function(){ 
    $.getJSON($(this).data('ajax-route'), function(response) { 
    // do something with response 
    }); 
}); 

Существует также расслоение делать гораздо более сложные вещи с динамическим JS маршрутизации https://github.com/FriendsOfSymfony/FOSJsRoutingBundle

редактировать: Для вашего конкретного случая можно установить данные маршрута на контейнере группы, то <ul>

<ul id="portfolioContainer" 
    data-ajax-trash="{{ path('v2_pm_patentgroups_sortgroups') }}" 
    data-ajax-sort="{{ path('v2_pm_patentgroups_sortgroups') }}"> 

, а затем из файла JS вы бы ссылаться на эти данные атрибуты:

$.ajax({ 
    type: "POST", 
    data: data, 
    url:$('#portfolioContainer').data('ajax-trash'), 
    cache: false, 
    success: function(data) { 
     document.location.reload(true); 
    }); 
+0

Проблема заключается в том, что у меня есть две группы, которые я могу перетащить как сортировать группы, когда я сортировать любую группу, как надо вызовите один метод, и обе группы являются trashable, если я удаляю любую группу, она должна вызвать другое действие. думать о группе как о любом теге html –

+0

Идея такая же. Вы бы сохранили сгенерированный тег 'path' на * some * в вашем представлении. Затем из вашего JS-файла вы получите доступ к нему на основе ID. Это всего лишь метод получения сгенерированного URL-адреса в javascript. Если вам нужны более сложные маршруты JS, я бы посмотрел на связанный мной узел. – MDrollette

+0

, но у элементов, которые у меня есть, есть id –

Смежные вопросы