首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将对象引用传递给省道聚合物元素中的事件处理程序

如何将对象引用传递给省道聚合物元素中的事件处理程序
EN

Stack Overflow用户
提问于 2013-10-12 15:10:11
回答 1查看 2.1K关注 0票数 3

不仅可以传递字符串属性,还可以传递对事件处理程序的对象引用?

来自gwt_contacts的https://github.com/sethladd/dart-polymer-dart-examples样品

contacts_view.html:

代码语言:javascript
复制
<div id="contact-list">
  <template repeat="{{contacts}}">
    <div>
      <input type="checkbox">
      <span on-click="selectContact" data-id="{{id}}">{{name}}</span>
    </div>
  </template>
</div>

contacts_view.dart中的处理程序

代码语言:javascript
复制
void selectContact(MouseEvent event, var detail, SpanElement target) {
  String id = target.attributes["data-id"];
  selectedContact = contacts.firstWhere((Contact contact) => contact.id == id);
}

如何传递联系人引用而不是ID?

类似问题:How do I pass arbitrary data to a click event handler function from a Dart polymer web component

更改:

在Christophe Herreman的暗示下,我添加了一个新元素:

html:

代码语言:javascript
复制
<polymer-element name="contact-view-item">
  <template>
    <span on-click="select">{{contact.name}}</span>
  </template>
</polymer-element>

省:

代码语言:javascript
复制
@CustomTag("contact-view-item")
class ContactViewItem extends PolymerElement {
  @observable @published Contact contact;

  void select(MouseEvent event, var detail, var target) {
    dispatchEvent(new CustomEvent("contactselected", detail: contact));
  }
}

并将列表更改为:

代码语言:javascript
复制
<div id="contact-list">
  <template repeat="{{contact in contacts}}">
    <div>
      <input type="checkbox">
      <contact-view-item contact="{{contact}}" on-contactselected="contactSelectedHandler"></contact-view-item>
    </div>
  </template>
</div>

并将处理程序添加到ContactsView:

代码语言:javascript
复制
void contactSelectedHandler(CustomEvent event) {
  selectedContact = event.detail;
}

但是,分派自定义事件会引发错误:

代码语言:javascript
复制
Uncaught Error: unsupported object type for conversion
Exception: unsupported object type for conversion
undefined (undefined:0:0)

连接似乎很好,因为如果我不将联系人作为详细信息传递而不是调用contactSelectedHandler,那么detail当然是空的。

EN

回答 1

Stack Overflow用户

发布于 2013-10-12 17:33:42

我认为这在HTML定义中是不可能的。当从元素类分派对象时,可以在CustomEventCustomEvent属性中分派对象。注意,当事件是detail时,event.detail属性实际上只是对CustomEvent的引用。如果不是,则detail属性为空。

组件定义

代码语言:javascript
复制
<div id="contact-list">
  <template repeat="{{contacts}}">
    <div>
      <input type="checkbox">
      <span on-click="contact_clickHandler" data-id="{{id}}">{{name}}</span>
    </div>
  </template>
</div>
代码语言:javascript
复制
void contact_clickHandler(MouseEvent event, var detail, SpanElement target) {
  String id = target.attributes["data-id"];
  Contact contact = contacts.firstWhere((Contact c) => c.id == id);
  dispatchEvent(new CustomEvent("contactselected", detail: selectedContact));
}

组件使用

代码语言:javascript
复制
<contact-list on-contactselected="contactList_contactSelectedHandler"></contact-list>
代码语言:javascript
复制
void contactList_contactSelectedHandler(CustomEvent event) {
  var contact = event.detail;
  // do something with selected contact
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19335691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档