Добавление выбранного входа динамически с помощью CakePHP - PullRequest
1 голос
/ 02 мая 2011

Когда пользователь добавляет событие, он должен иметь возможность добавлять группы из таблицы «полос» к событию.Это уже все настроено с HABTM, и у меня это работает, когда я жестко кодирую несколько блоков выбора на странице.

Проблема в том, что я хотел бы иметь только один блок выбора, а затем "кнопка «Добавить еще один бэнд», которая добавит еще один вход выбора со списком бэндов и т. д. - столько, сколько они захотят.

Я нашел этот пост: Добавить и удалить поля формы вCakephp , который объясняет, как динамически добавлять поле ... моя проблема в том, что список полос огромен и регулярно меняется, поэтому я не могу себе представить, что это работает для меня.

Любые идеи получший способ пойти по этому поводу?- Добавление динамического ввода, который заполняется списком групп из моей базы данных?Аякс может быть?(Я пока не знаю, как сделать ajax с тортом) Ajax выглядит нормально, но действительно ли я хочу получать список групп каждый раз, когда пользователь нажимает кнопку «добавить группу»?Может быть, это нормально?

Любая помощь / направление очень ценится.Пример кода был бы БОЛЬШИМ, но если ничего другого, толчок в правильном направлении был бы очень полезен.

1 Ответ

3 голосов
/ 02 мая 2011

Вы можете использовать один вход выбора с кнопкой «Добавить группу».Когда пользователь нажимает «Добавить группу», перехватывает событие с помощью javascript, копирует выбранную группу в список (визуально) и добавляет идентификатор для скрытого ввода (который будет использоваться при отправке формы).Пример jQuery / CakePHP ниже.

<ul id='band_list'></ul>
<?php echo $form->create('Event', array('id'=>'event_form'));?>
<?php echo $form->input('band_ids', array('type'=>'hidden', 'id'=>'band_ids')); ?>
<?php echo $form->input('bands', array('type'=>'select', 'options'=>$bands, 'id'=>'bands_selector')); ?>
<button id='add_band'>Add Band</button>

<script type='text/javascript'>
    var band_count = 0;
    $('#add_band').click(function(event) {
        event.preventDefault();
        $('<li>' + $('#bands_selector option:selected').text() + '</li>').appendTo('#band_list');
        $('<input type="hidden" name="data[Band][Band]['+band_count.toString()+']" value="'+$("#bands_selector option:selected").val()+'">').appendTo('#event_form');
        band_count++;
    });
</script>
...