Мой вопрос связан с внедрением библиотеки dragula в мое приложение laravel.
У меня есть драгула на работу, но она работает только с одним «командным» объектом. Я пытаюсь создать цикл, в котором каждый объект команды будет принимать тег name. Я положил {{ $teamvalue->id }}
в идентификаторе, чтобы создать уникальный идентификатор для каждого объекта, но это позволяет только с последним сгенерированным объектом команды взаимодействовать.
<div class="nameroll" id="nameroll">
@foreach($names as $key => $value)
<div class="nametag" draggable="true">
<p>{{ $value->name }}</p>
</div>
@endforeach
</div>
<div class="modroll">
@foreach($mods as $key => $value)
@foreach($modteams as $key => $teamvalue)
@if($teamvalue->mod_id === $value->id)
<div class="col-md-4">
<div class="title">
<h1>{{ $value->mod_intent }}</h1>
<h1>{{ $teamvalue->modteam_description }}</h1>
</div>
<div class="team" id="team{{ $teamvalue->id }}">
</div>
</div>
@endif
@endforeach
@endforeach
</div>
Затем я попробовал это в сочетании с положением {{ $teamvalue->id }}
в коде JS.
<script type="text/javascript">
@foreach($modteams as $key => $teamvalue)
dragula([document.getElementById('nameroll'), document.getElementById('team{{ $teamvalue->id }}')], {
copy: function (el, source) {
return source === document.getElementById('nameroll')
},
accepts: function (el, target) {
return target !== document.getElementById('nameroll')
}
});
@endforeach
</script>
Но поскольку это создает несколько версий одного и того же кода, они конфликтуют, и ни с одним из объектов команды невозможно взаимодействовать.
Я просто хочу знать, как создать цикл так, чтобы код js позволил перетаскивать текст правильно для каждого командного объекта, поэтому я могу перетащить тег имени к каждому, и он останется там.
Спасибо!
Изменить: разъяснение
Div Nameroll содержит коллекцию Users (Nametag).
Div Modroll содержит коллекцию команд (команды).
Я хочу иметь возможность перетаскивать объект «Nametag» в любой из объектов «Team» и хранить его там. В настоящее время это работает, но только с последним объектом ‘team’ в коллекции. Я пришел к выводу, что функция js для Dragula запускается только для последней коллекции, поскольку я передал значение ($ teamvalue-> id) и в функции существует только последний идентификатор в группе.
Я думаю, что вы можете избавиться от foreach
в JavaScript Попробуйте использовать draggable="true" ondragstart="myFunction(event)"
для div class='team'
и обернуть drag
логика в функции.
<div class="team" id="team{{ $teamvalue->id }}" draggable="true" ondragstart="dragMe('{{$teamValue}}')">
</div>
Когда div тянут, The dragMe
функция будет вызвана, где Laravel будет преобразовывать $teamValue
в json
так что вы можете использовать непосредственно в JavaScript.
<script type="text/javascript">
function dragMe(teamValue){
dragula([document.getElementById('nameroll'), document.getElementById('team'+teamValue.id)], {
copy: function (el, source) {
return source === document.getElementById('nameroll')
},
accepts: function (el, target) {
return target !== document.getElementById('nameroll')
}
});
}
</script>
Других решений пока нет …