2014-10-02 3 views
0

Могу ли я реализовать кнопку обновления в шаблоне ветви, которая будет перезагружать данные объекта на клик?symfony2 установить кнопку обновления

Вот мой контроллер:

public function indexAction() {  

    $repositoryForHistory = $this->getDoctrine()->getManager()->getRepository("PagesBundle:histories"); 

    $histories = $repositoryForHistory->findBy(Array(), Array('date' => 'DESC')); 

    return $this->render('PagesBundle:Default:index.html.twig', array(     
       'histories' => $histories)); 
} 

}

И ДИВ я хочу перезагрузить:

<tbody> 
      {% for history in histories %} 
       <tr> 
        <td class="center" style="color: #ADADAD;">     

         <i class="fa fa-calendar-o"></i> 

        </td> 
        <td> 
         <span class="bold-text text-small">{{history.user}} {{history.action}} {{history.featureName}}</span> 
        </td> 
        <td class="center" style="color: #ADADAD;">{{history.date|date('d-m-Y H:i')}}</td> 

      </tr> 
       {% endfor %} </tbody> 



<a class="panel-refresh" href="#"> <i class="fa fa-refresh"></i> <span>Refresh</span></a> 

ответ

0

спасибо ребята @Alex и @Blowski вот решение:

в моем контроллере

function reloadHistoryAction() { 
    $repositoryForHistory = $this->getDoctrine()->getManager()->getRepository("PagesBundle:histories"); 

    $histories = $repositoryForHistory->findBy(Array(), Array('date' => 'DESC')); 
    $html=""; 
    foreach ($histories as $history) { 
     $html .="<tr> 
        <td class='center' style='color: #ADADAD;'>        
        <i class='fa fa-tasks'></i>       
        </td> 
        <td> 
        <span class='bold-text text-small'>".$history->getUser()." ".$history->getAction()." ". 
       $history->getFeatureName()." 
         </span> 
        </td> 
        <td class='center' style='color: #ADADAD;'> 
        ". $history->getDate()->format('d-m-Y H:i')." 
        </td> 

      </tr> "; 

    } 
    return new Response($html); 
} 

И в моем шаблоне веточку вызова Ajax в действии контроллера:

$('.panel-refresh').click(function (e) { 
     e.preventDefault(); 
     $.ajax({ 
      url:'{{path('history/reload')}}', 
      type: "POST", 
      cache: "false", 
      dataType: "html", 
      success: function (data) { 
       $("tbody").html(data); 
      } 
     }); 
    }); 

Спасибо вам большое!

0

Вы можете сделать запрос Ajax и отправить его, нажав на кнопку Обновить , и при успехе просто замените html элемента, который вы хотите обновить (на самом деле в вашем шаблоне нет div, и я не совсем понимаю, что вы подразумеваете под div).

Итак, для этого вам нужно создать специальное действие контроллера, которое вернет плохой html без макета.

Это самый простой способ.

Также вы можете взглянуть на angularjs. Но в некотором смысле это может быть немного сложнее.

+0

AngularJS - Немного сложнее? o_O –

+0

Для кого-то может быть, да. – Alex

0

Вам нужно сделать что-то с помощью AJAX, так что, когда кто-то нажимает на «кнопку обновления» он делает XMLHttpRequest для Symfony, который возвращает ответ, содержащий только <tr> s (не таблицу оберточной или <head> , и т.д).

В JQuery (вы не сказали, вы использовали его, но JavaScript гораздо сложнее писать):

$('.panel-refresh').click(function(event, ui) { 

    // prevents the browser following the click 
    event.preventDefault(); 

    // replaces the contents of `<tbody>` with the response from the controller 
    $('tbody').load('/path/to/action'); 

} 

и заменить '/path/to/action' фактический путь к действию.

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