установите флажки и отправьте их в качестве параметра к действию - PullRequest
0 голосов
/ 15 ноября 2011

Я пытаюсь реализовать массовое действие удаления для списка элементов, где у каждого элемента есть флажок, и есть кнопка для удаления всех выбранных элементов.Все это в symfony btw.

Моя самая большая проблема: этот список с флажками происходит из вызова AJAX, поэтому я не могу определить слушателей в шаблоне, где список определен.Мне нужно сделать это в шаблоне, который получает ответ AJAX.

Я даю вам часть своего кода:

  • шаблон, возвращающий список, содержит:

`

foreach($items as $item){
    echo '<input id="'.$item->getItemID().'" type="checkbox" onClick="[I CAN'T REFERENCE HERE A FUNCTION IN THE OTHER TEMPLATE]">';
    echo 'etc ...';
}`
  • и шаблон получения списка:

`

<div id="itemList">
    [the AJAX list goes here]  
</div>
<input type="button" value="delete all items">`

Итак, мой вопрос: как я могусделать это, чтобы при нажатии кнопки вызывать действие symfony с массивом выбранных флажков (или эквивалентной информации) в качестве параметра.

Большое спасибо за потраченное время!

1 Ответ

1 голос
/ 15 ноября 2011

Первое, что нужно сделать, это получить массив флажков и передать их Symfony.Если у вас есть следующее html:

<input id="1" type="checkbox" class="delete">
<input id="2" type="checkbox" class="delete">
<input id="3" type="checkbox" class="delete">
<input id="4" type="checkbox" class="delete">
<input type="submit">

со следующим jquery:

$('input[type=submit]').click(function(){
    var elems = new Array();
    $('.delete:checked').each(function(){
        elems.push($(this).attr('id'));
    });

    $.ajax({
        type: 'POST',
        url: 'url',
        data: {elements_to_delete: elems}});
});

См. Здесь: http://jsfiddle.net/HbkvF/

Затем вы делаетеexecuteDeleteBatch() что-то вроде (не проверено):

public function execute(sfWebRequest $request)
{
  $ids = $request->getParameter('elements_to_delete');
  $count = Doctrine_Query::create()
    ->delete()
    ->from('<YOUR CLASS>')
    ->whereIn('id', $ids)
    ->execute();
  }
}

$count возвращает количество удаленных элементов.

...