0

私はウェブアプリdragula.jsでライブラリを使用しています。ember.js

I まで、つまり、以前にドラッグ可能だったものをドラッグできなく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ライブラリが必要なすべての構成で初期化されているように見えますが、ルートを再訪した後に正しく機能しない理由に困惑しています。

ヘルプ/ポインタは大歓迎です。ありがとう!

4

1 に答える 1

0

私はついに自分の質問への回答を投稿する時間を見つけました。わーい!

理由:

ノード参照が無効であったか、言い換えると、didInsertElementフックのノード参照がルートへの前回の訪問で作成されたノードを指していたため、DOM で見つかりませんでした。同じルート/ページへのその後の各訪問でDOMノードはember(もちろん:))によって再作成されています。

解決:

DOM ノード参照を保存/キャッシュする代わりに、必要なノードへの新しい DOM ノード参照をルートにアクセスするたびにフェッチする必要があります。そうすれば、常に有効なノード参照が得られます。

于 2016-09-23T18:05:06.003 に答える