2014-08-28 3 views
0

Мы пытаемся сделать по-другому нашу страницу сбора форм прямо из шаблона действия.Коллекция рендеринга Symfony2/twig remove_btn

Проблема заключается в том, что мы не можем отображать кнопку widget_remobe_btn. Например, если мы попробуем {{ form_widget(entity.name) }}, мы получим имя. Но в этом случае мы не получаем кнопку, как мы ожидаем, {{ form_widget(entity.vars.widget_remove_btn) }}.

Если мы добавим {{ form_rest(entity) }} (и так изнутри, который печатает каждую строку в элементе коллекции), кнопки «удалить» удаляются из-под формы, но не отображаются там, где сидит тег form_widget.

{{ form_start(form) }} 
    {# render the task's only field: description #} 

    <h3>Tags</h3> 
     {# iterate over each existing tag and render its only field: name #} 
     <table class="table table-bordered table-striped table-hover"> 
      <thead> 
       <tr> 
        <th>Name</th> 
        <th>Actions</th> 
       </tr> 
      </thead> 
      <tbody> 
      {% for entity in form.collection %} 
       {{ form_start(entity) }} 
        <tr> 
         <td>{{ form_widget(entity.name) }}</td> 
         <td>{{ form_widget(entity.vars.widget_remove_btn) }}</td> 
        </tr> 
       {{ form_end(entity) }} 
      {% endfor %} 
      <tbody> 
     </table> 
{{ form_end(form) }} 

Только в случае, если это может быть полезным, мы используем MopaBootstrapBundle

ответ

0

Нам удалось получить его работу с помощью form_row(entity) вместо row_rest() или row_widget(), что в конечном итоге ведет себя как form_rest() должен; то есть выводом кнопки.

Вот окончательный код:

{{ form_start(form) }} 

    <h2>Form</h2> 

     <table class="table table-bordered table-striped table-hover collection-table"> 
      <thead> 
       <tr> 
        <th>Op</th> 
        <th>Operation</th> 
        <th>Tools</th> 
        <th>Actions</th> 
       </tr> 
      </thead> 
      <tbody> 
      {% for entity in form.entities %} 
       <tr> 
        <td>{{ form_widget(entity.name) }}</td> 
        {{ form_rest(entity) }} 
       </tr> 
      {% endfor %} 
      <tbody> 
     </table> 
    {{ form_rest(form) }} 
{{ form_end(form) }} 

Тогда для того, чтобы сделать кнопку wowking - потому что мы используем MopaBootstrapBundle - мы добавили этот фрагмент в из JavaScript файла:

$('.collection-table').on('click.collection.data-api', '[data-collection-remove-btn]', function (e) { 
    var $btn = $(e.target); 

    if (! $btn.hasClass('btn')) { 
     $btn = $btn.closest('.btn'); 
    } 

    $btn.closest('tr').remove(); 

    e.preventDefault(); 
}); 
Смежные вопросы