我想从聚合元素内部触发/发送/emits 自定义事件.例如,我想将一个普通的DOM事件(如"changed")转换为一个更具语义的事件(如"todoupdated").

这是我拥有的HTML:

<polymer-element name="todo-item" extends="li" attributes="item">
  <template>
    <style>
      label.done {
        color: gray;
        text-decoration: line-through;
      }
    </style>
    <label class="checkbox {{item.doneClass}}">
      <input type="checkbox" checked="{{item.done}}">
      {{item.text}}
    </label>
  </template>
  <script type="application/dart" src="todo_item.dart"></script>
</polymer-element>

我希望"更改事件"复选框从自定义元素中冒泡出来,作为其他内容...有用的.:)

推荐答案

Step 1

捕获<input>上的更改事件.请注意下面的on-change条.

<!-- from inside todo_item.html -->
<input type="checkbox" checked="{{item.done}}" on-change="{{change}}">

Step 2

在包含复选框的自定义元素代码中处理更改事件.

import 'package:polymer/polymer.dart';
import 'dart:html';
import 'models.dart';

@CustomTag('todo-item')
class TodoItemElement extends PolymerElement with ObservableMixin {
  @observable Item item;

  bool get applyAuthorStyles => true;

  void change(Event e, var details, Node target) {
    // do stuff here
  }
}

请注意change事件处理程序.每当复选框状态更改时,都会运行该方法.

Step 3

调度自定义事件.

  void change(Event e, var details, Node target) {
    dispatchEvent(new CustomEvent('todochange'));
  }

注意:自定义事件名称不得包含破折号.

Step 4

在父自定义元素中侦听自定义事件.

    <template repeat="{{item in items}}" >
      <li is="todo-item" class="{{item.doneClass}}" item="{{item}}" on-todochange="todoChanged"></li>
    </template>

请注意on-todochange的用法.

好好享受吧!

Dart相关问答推荐

Dart中的运算符(){…}做什么?

如何扩展 Dart 套接字 BroadcastStream 缓冲区大小为 1024 字节?

Flutter - 对 Cloud Firestore 进行排序

在 Flutter 中检测键盘事件

Dart/Flutter判断值是否为整数

如何在 Flutter 中渲染单个像素?

如何在 Dart 语言中将 Future 转换为 List

如何在 Dart 中获取当前脚本的目录?

将ListTile图标向左对齐

在 TextInputType 更改后控制器重置的 Flutter TextField

Flutter-当文本字段有焦点时隐藏提示文本

如何在Dart中处理JSON

如何减少 ListView.builder 中 RaisedButton 的宽度?

如何将整数中的ascii值转换为Flutter中的等效字符?

如何为 macos 桌面应用启用 Flutter 上网权限?

用 dart 解析日期

DART:future的语法 then

dart,overloading[] 运算符?

我应该更喜欢迭代 Map.entries 还是 Map.values?

如何在 Dart 中比较两个对象以查看它们是否是同一个实例?