(拖放)Dragula.js无法重新访问路线(在ember.js应用程序中)

时间:2016-05-29 21:15:50

标签: ember.js drag-and-drop dragula

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

事情正常(能够拖放东西)直到我revisit 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库已经初始化了所有必需的配置,但是我很困惑为什么它在重新访问路由后无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

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

原因:

节点引用无效或换句话说,无法在DOM中找到,因为我的didInsertElement挂钩中的节点引用指向上一次访问路由时创建的节点随后访问同一路径/页面,ember(ofcourse :)重建了DOM节点。

解决方案:

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