聚合物1.0 - 铁列表 - 选择

时间:2015-10-31 06:59:03

标签: dart dart-polymer

使用dart Polymer 1.0中的铁列表。尝试通过选择列表中的项目来实现铁列表。当item是String时,这种方法有效,但对于结构化类型则无效。

当运行以下代码后,获得打印输出。

>Contains : false
>Uncaught Unhandled exception:
>NoSuchMethodError: method not found: 'shorttext'
>Receiver: Instance of 'JsObjectImpl'

内部断点(objText!= null)列出“objText-> JavaScriptView-> proto >获取/设置短语”关闭,但建议绑定有问题。

铁列表文档提到了对项目进行操作的事情。文档中的JavaScript示例具有选择权并使用模型。

https://elements.polymer-project.org/elements/iron-list

  

如果为true,则点击一行将选择该项目,将其数据模型放入可通过选择属性检索的所选项目集中。

     

请注意,在列表项中点击可聚焦元素不会导致选择,因为它们被假定为具有自己的动作。

好的,有没有人进入dart-polymer 1.0的类似部分?还欢迎有关如何使用精选铁列表的建议吗?

Html方面:

 <iron-list id="id_list" items="{{listitem}}" as="item" selection-enabled>
   <template>
     <paper-item on-tap="tap_event">{{item.shorttext}}</paper-item>
   </template>
 </iron-list>

在Dart方面:

class ItemText extends JsProxy {

  @reflectable
  String shorttext;
  ItemText(this.shorttext);
}

@PolymerRegister('list-demo')
class ListDemo extends PolymerElement {

  @property
  List<ItemText> listitem;

  @property
  int nrelements = 10;

  // Constructor used to create instance of MainApp.
  ListDemo.created() : super.created(){
    List<ItemText> l = [];

    for (int i = 0; i < nrelements; ++i){
      l.add(new ItemText('Name ' + i.toString()));
    }

    listitem = l;
    print('created : ${$['id_list'].selectionEnabled}');
    this.notifyPath('listitem', listitem);
  }

  @reflectable
  void tap_event(event, [_]) {

    IronList e = $['id_list'];
    Object objText = e.selectedItem;
    if (objText != null){
      print('Contains : ${listitem.contains(objText)}');
      print('The short text : ${objText.shorttext}');
    }
  }

}

1 个答案:

答案 0 :(得分:4)

更改行

Object objText = e.selectedItem;

ItemText objText = convertToDart(e.selectedItem);

我猜这是一个错误。请在https://github.com/dart-lang/polymer-dart

报告

我建议不要使用Polymer元素的.created()构造函数。请改用attached()ready()

考虑将selectedItem绑定到属性,并在为此目的更改selectedItem值时运行代码,而不是on-tap事件。

`<iron-list ... selected-item="{{selectedItem}}">`
@Property(observer: 'selectedItemChanged') ItemText selectedItem;

@reflectable
void selectedItemChanged(newValue, oldValue) {
  // your code here
}

@property ItemText selectedItem;

@Observe('selectedItem')
void selectedItemChanged(ItemText newValue) {
  // your code here
}