Я пытаюсь добавить функцию перетаскивания в приложение Meteor с помощью библиотеки Dragula. Это кажется очень простым и простым в использовании. Однако, хотя я следил за инструкциями и смотрел другие примеры из Интернета, я не смог заставить его работать. Он не генерирует никаких реальных ошибок, но элементы <div>
, которые я хочу переместить, не могут быть перемещены.Как заставить это работать: Dragula drag-and-drop на Meteor
JS:
import { Template } from 'meteor/templating';
import './body.html';
if (Meteor.isClient) {
Meteor.startup(function() {
Session.set("view", "titleScreen");
});
Template.body.helpers({
template_name: function() {
return Session.get("view");
}
});
//click event to change view from title screen to main screen
Template.body.events({
'click .changeScreen': function (e) {
e.preventDefault();
Session.set("view", "mainScreen");
var selectedView = Session.get('view');
console.log(selectedView);
}
});
//drag and drop the contents of divs 'move1' and 'goal1'?
Template.body.onRendered(function() {
dragula([document.getElementById('move1'), document.getElementById('goal1')]);
});
}
HTML:
<body>
{{> Template.dynamic template=template_name}}
</body>
<template name="plcHolder">
{{view}}
{{#if view "title"}}
{{> titleScreen}}
{{else}}
{{> mainScreen}}
{{/if}}
</template>
<template name="titleScreen">
<!--here would be the contents of the title screen, like some text and a button-->
</template>
<template name="mainScreen">
<div class="container">
<div id="goal1" class="goalBoxBG">
<div class="goalBox"></div></div>
<!--...-->
<div id="move1" class="moveBoxBGL">
<div class="moveBox"></div></div>
<!--...-->
</div>
</template>
Это мое первое приложение Метеор, поэтому я решил использовать ту же структуру, используемую обучающей метеора, т.е. JS и HTML файлы, указанные выше размещаются в ../imports/ui/ и импортируются оттуда. Я установил Dragula с npm, а файл dragula.js находится в \ node_modules \ dragula.
EDIT: Мне удалось заставить его работать, перемещая код до конца HTML-файла, поэтому основная причина должна заключаться в том порядке, в котором выполняется код. Это seems, что onRendered()
срабатывает после первоначальной загрузки страницы и не учитывает шаблоны, которые изменены JavaScript.
Вы не являетесь пользователем Dragula в своем коде. – Mikkel
@Mikkel Я добавил оператор импорта для '/ node_modules/dragula/dragula.js', но это не изменило ситуацию. Однако файл отображается в отладчике браузера. – JohnTheAsker