(Прошу прощения за многогранный вопрос!)
В основном вопрос таков; как я могу использовать функциональность Laravel 5 для клонирования поля выбора, сохранения этих данных и (в качестве бонуса) отображения данных при помощи привязки модели формы. Таким образом, если есть одна «группа» опыта работы (будь то компания и должность) или их много, все они будут отображаться правильно.
Я создал форму с полями, как показано ниже:
<div class="workexperience">
<!--Work Experience / position -->
<!-- Form Input -->
<div class="form-group">
{!!Form::label('positions_list', 'Work Experience:')!!}
{!!Form::select('positions_list', $positions, null, ['id'=> 'positions_list', 'class'=>'form-control','multiple'])!!}
</div>
<!--company-->
<div class="form-group" >
{!!Form::label('companies_list', 'Company:')!!}
{!!Form::select('companies_list', $companies, null, ['id'=>'companies_list','class'=>'form-control','multiple'])!!}
</div>
</div>
<div id="workexperience-placeholder"></div>
<a onclick="cloneMe('#workexperience')" class="btn btn-default btn-block"><span class="icon-entypo icon-plus"></span><b>Add Another</b></a>
и я использую jquery clone, чтобы позволить пользователю добавлять новые наборы позиций и компаний
function cloneMe(thisDiv)
{
$(thisDiv).clone(false).insertBefore(thisDiv+"-placeholder:last")
}
Визуально это, кажется, работает, поскольку это действительно клонирует коробки. Однако я использую Select2 для создания эффекта «тега» (из Laracasts-23 «Синхронизация тегов»!) И, если в выпадающем списке уже есть данные (фактически «тег»), когда я нажимаю, чтобы клонировать блоки, в которых находятся данные. перенесли в новое клонированное поле.
Как мне клонировать таким образом, чтобы выбранный элемент не переносился? Я пытался использовать JQuery, такие как:
.find("input").val('').end()
но мне не повезло (я попытался выбрать вместо ввода в вышеупомянутом)
Я уверен, что то, что я пытаюсь сделать, на самом деле довольно распространено, но я просто пытаюсь найти способ сделать это. (Я также попробовал cloneya, но это, казалось, конфликтовало с Select2.)
Если у вас есть предложения по улучшению моего вопроса, пожалуйста, дайте мне знать.
Заранее спасибо!
Mhluzi
Я решил свою проблему, ориентируясь на каждого отдельного выбора:
$('.positions').select2("destroy");
$('#workexperience').clone(true).insertBefore("#workexperience-placeholder:last")
.end();
$('.positions:last').removeAttr("selected")
.val([])
.end();
$('.positions').select2(
{
placeholder: 'Current or last position',
maximumSelectionLength: 1,
tags: true
});
Не очень элегантно, но это работает для меня.
Других решений пока нет …