我正在ember.js
的Web应用程序中使用dragula.js
库。
事情运行良好(能够拖放东西),直到我revisit the route
,之后drag and drop just stops working
,也就是说,不能拖动以前可以拖动的任何内容。并且控制台中没有js错误。然后,我刷新页面(从任何路由),它再次工作。
简而言之,drag n drop
仅在访问/加载路线时首次工作。
我尝试过的事情:
- 已验证要拖放的
DOM items
是否添加到 dragula 的config.containers
中。 - 尝试从
afterRender
运行循环中的didInsertElement
元素重新渲染组件。
didInsertElement(){
this._super(...arguments);
Ember.run.scheduleOnce('afterRender', this, () => {
let drake = window.dragula(this.getDraggableContainers(), this.get('dragulaConfig'));
this.set("drake", drake);
}
对我来说,似乎dragula
库是用所有必需的配置初始化的,但我感到困惑的是,为什么它在重新访问路线后无法正常工作。
任何帮助/指示将不胜感激。谢谢!
我终于找到了一些时间来回答我自己的问题。耶!
原因:
节点引用无效或换句话说,在 DOM 中找不到,因为我的 didInsertElement
钩子中的节点引用指向在上次访问路由中创建的节点,并且在每次后续访问同一路由/页面时,DOM 节点正在由ember
重新创建(当然:))。
溶液:
不是存储/缓存 DOM 节点引用,而是需要在每次路由访问时获取对所需节点的新 DOM 节点引用。这样,您将始终拥有有效的节点引用。