0

我在网络应用程序中使用dragula.js库。ember.js

事情工作正常(能够拖放东西),直到 Irevisit the route之后drag and drop just stops working,也就是说,不能拖动以前可拖动的任何东西。并且控制台中没有js错误。然后,我刷新页面(从任何路线),它再次工作。

简而言之,该drag n drop作品仅在第一次访问/加载路线时起作用

我尝试过的事情:

  • 验证是否DOM items要拖放的 被添加到 Dragula 的config.containers.
  • 尝试从didInsertElement运行在的运行循环中的元素重新渲染组件afterRender

didInsertElement(){ this._super(...arguments); Ember.run.scheduleOnce('afterRender', this, () => { let drake = window.dragula(this.getDraggableContainers(), this.get('dragulaConfig')); this.set("drake", drake); }

对我来说,似乎该dragula库已使用所有必需的配置进行了初始化,但我很困惑为什么在重新访问路由后它不能正常工作。

任何帮助/指针将不胜感激。谢谢!

4

1 回答 1

0

我终于找到了一些时间来回答我自己的问题。耶!

原因:

节点引用无效,或者换句话说,在 DOM 中找不到,因为我的didInsertElement钩子中的节点引用指向在上一次访问路由时创建的节点,以及在每次后续访问同一路由/页面时创建的节点DOM节点正在由ember(当然:))重新创建。

解决方案:

不是存储/缓存 DOM 节点引用,而是需要在每次路由访问时获取对所需节点的新 DOM 节点引用。这样,您将始终拥有有效的节点引用。

于 2016-09-23T18:05:06.003 回答