在Dart中的Polymer元素中使数据类型可迭代

时间:2014-01-26 23:31:31

标签: dart polymer

我在Dart中有自定义数据类型,我想使用template repeat进行迭代。以下是有问题的数据类型的精简版本:

class Note {
  String content;
  Note(this.content);
}

class Notebook {
  List<Note> notes;
  Notebook(this.notes);
}

我希望能够在Note中迭代Notebook,如下所示:

<polymer-element name="x-notebook=view">
  <ul>
    <template repeat="{{note in notebook}}">
      <li is="x-note-view" note="{{note}}></li>
    </template>
  </ul>

  <script ...></script>
</polymer-element>

问题当然是标准List可以通过这种方式迭代,但我不知道如何修改我的自定义Notebook数据类型来做同样的事情。 / p>

的一种方式似乎是将toList()方法附加到Notebook类:

List<Note> toList() => notes;

但我希望在没有先转换为List的情况下实现这一目标。

1 个答案:

答案 0 :(得分:5)

阅读polymer_expression包的来源会发现in运算符的右侧必须是Iterable,因此您必须实现此接口。

我做了一个快速测试,以下似乎有效:

import 'dart:collection' show IterableMixin;

// [IterableMixin] implement all methods of [Iterable]
// in terms of [iterator].
class Notebook extends Object with IterableMixin<Note> {
  List<Note> notes;
  Notebook(this.notes);

  get iterator => notes.iterator;
}