如何在地图上使用virtual-repeater.for

时间:2019-07-10 17:33:59

标签: aurelia aurelia-framework

我正在尝试使用aurelia-ui-virtualization创建使用地图无限滚动的中继器

我查看了文档,但找不到使用Map的示例,仅使用数组 模板:

<template>
<div virtual-repeat.for="[key,valu] of mp">
${key}

</div>

</template>

和班级

export class App{
   mp= new Map<any,any>([['one','foo'],['two','bar]])
}

我期望中继器可以工作,但是我得到了:

aurelia-ui-virtualization.js?b7bb:791 Uncaught (in promise) Error: Value is not iterateable for virtual repeat.
at VirtualRepeat.itemsChanged (aurelia-ui-virtualization.js?b7bb:791)
at VirtualRepeat.attached (aurelia-ui-virtualization.js?b7bb:727)
at Controller.attached (aurelia-templating.js?8628:3759)
at View.attached (aurelia-templating.js?8628:1772)
at ViewSlot.attached (aurelia-templating.js?8628:2130)
at View.attached (aurelia-templating.js?8628:1777)
at ViewSlot.attached (aurelia-templating.js?8628:2130)
at View.attached (aurelia-templating.js?8628:1777)
at ViewSlot.attached (aurelia-templating.js?8628:2130)
at eval (aurelia-framework.js?0682:115)

2 个答案:

答案 0 :(得分:2)

我在aurelia讨论link时问了同样的问题,@ bigopon告诉我尚不支持。

所以我最终使用了值转换器

export class MapArrayValueConverter {
  toView(value) {
    if(value){
      if(value instanceof Map )
      return [...value]
    }
  }

  fromView(value) {

  }
}

答案 1 :(得分:0)

根据我的测试,似乎虚拟中继器没有能力直接使用Map。

尝试一下。

<template>
  <div virtual-repeat.for="item of mp">
    ${item};${item[0]};${item[1]}
  </div>
</template>

export class App {
    map = new Map([["one", "foo"], ["two", "bar"]]);
    mp = Array.from(map);
}