【问题标题】:How to use core-drag-drop in Dart to make a Polymer Element Draggable?如何在 Dart 中使用 core-drag-drop 使聚合物元素可拖动?
【发布时间】:2014-10-03 10:39:22
【问题描述】:

我正在尝试使 Polymer Dart 元素可拖动,并与列表中的另一个项目交换信息。我最近的尝试是使用 元素。我正在使用由 trackstart、track 和 trackend 元素创建的事件。我可以让它们触发,但我无法弄清楚如何获得拖动效果的视觉表示,就像你可以通过将它们的可拖动属性设置为 true 来使用常规

元素一样。不仅如此,我不知道我应该如何从这些 JS 事件中获取信息。我已经设法从 Dart 事件中获取了一些数据,但我确信 元素设置了一些丢失的数据,(或者是否存在?)。
<link rel="import" href="../../packages/polymer/polymer.html">

<link rel="import" href="../../packages/core_elements/core_drag_drop.html">

<link rel="import" href="draggable-item.html">

<polymer-element name="item-list">
    <template>
        <core-drag-drop></core-drag-drop>
        <draggable-item id="item1" on-trackstart="{{ dragStart }}" on-track="{{ dragIt }}" on-trackend="{{ dragEnd }}"></draggable-item>
        <draggable-item id="item2" on-trackstart="{{ dragStart }}" on-track="{{ dragIt }}" on-trackend="{{ dragEnd }}"></draggable-item>
    </template>
    <script type="application/dart">
      import 'dart:html';

      import 'package:polymer/polymer.dart';

      @CustomTag('item-list')
      class ItemList extends PolymerElement {
        ItemList.created() : super.created();

        ...

        dragStart(Event ev) {
            print("dragStart: ${ev.currentTarget.id}");
        }


        dragIt(Event ev) {
            print("dragIt: ${ev.path}");
        }

        dragStop(Event ev) {
            print("dragStop $ev, ${ev.target.id}, ${ev.path}");

        }
      }
    </script>
</polymer-element>

这适用于打印信息,但仍然让我不知道如何使用它来将一个项目拖到另一个项目上,在拖动目标时突出显示它们,然后与最终目标交换信息。这有助于交换列表中项目的顺序。有点像 Google Play 音乐应用程序,您可以在其中将歌曲拖放到播放队列中的不同位置。有人可以帮我吗?

更新(澄清) 我想让聚合物飞镖元素可拖动。 demo.html 用于拖动

元素。我可以在 Dart 中进行拖放以在
上正常工作。

【问题讨论】:

  • 有一个Chrome bug(最近已修复)但可能尚未发布(尤其是 Dartium)。您是否检查过您的问题是否是由此错误引起的?
  • 我能够为此触发事件,所以我不确定您指的是什么错误。然而 是我接近成功的唯一途径。你在说什么在 onDragStart 和朋友中触发的其他拖放事件?如果是这样,那么我不能让他们在 Polymer 中工作,所以也许吧。

标签: drag-and-drop dart dart-polymer dart-html core-elements


【解决方案1】:

【讨论】:

  • 我还不能直接在核心元素的 Dart 端口中访问事件详细信息。我写的一个单元测试显示了我必须如何做github.com/dart-lang/core-elements/blob/master/test/…var detail = new js.JsObject.fromBrowserObject(e)['detail'];,因为你也遇到了这个问题,event.detail 总是空的。不过,在没有这种解决方法的情况下,它似乎在示例中有效。
  • 实际上,再次查看此示例后,我意识到它是在
    元素上进行拖放,而不是在 Polymer 元素上。我可以使用 onDrag* 事件在仅限 Dart 的应用程序中拖放以处理
    元素。它使我遇到麻烦的聚合物元素可拖动。
  • 在我提出这个问题之前,我已经多次查看 demo.html 示例。不过还是谢谢。
  • 它应该以与 Polymer 元素相同的方式工作。如果不是,则可能是我对您的问题的评论中链接的错误。
  • 我也在为如何从 dart 使用 dnd 而苦苦挣扎。我们真的需要操纵一个 JsObject 来做到这一点吗?当然我错过了一些东西
猜你喜欢
相关资源
最近更新 更多
热门标签