Chr*_*ett 19 dart dart-webui polymer
在Dart的Web UI中,可以传递任意数据以响应事件,例如,以下代码段将值传递2给increment(int incBy)方法以响应按钮的点击事件:
<!-- Web UI -->
<element name="x-click-counter">
<template>
<button on-click="increment(2)"> <!-- passing a value of 2 -->
Click me
</button>
</template>
</element>
<script>
import 'package:web_ui/web_ui.dart';
class CounterComponent extends WebComponent {
void increment(int incBy) { // accept the value of 2
count = count + incBy;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
在Polymer(和Polymer.dart)中,on-click事件属性需要函数名的字符串版本,而不是实际的函数调用.这在聚合物文档页面上描述为:
事件处理程序属性的值是组件上方法的字符串名称.与传统语法不同,您不能将可执行代码放在属性中.
使用polymer.dart,它看起来像:
<polymer-element name="x-click-counter">
<template>
<button on-click="increment"> <!-- can't pass a value of 2, as you need to pass a string -->
Click Me
</button>
</template>
</polymer-element>
<script>
import 'package:polymer/polymer.dart';
@CustomTag("x-click-counter")
class CounterComponent extends PolymerElement with ObservableMixin {
@observable int count = 0;
void increment(Event event, var detail, var target) { // How do I pass 2 to this function?
count = count ++;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
问题:如何将任意值传递给increment函数?
Chr*_*ett 19
您可以使用html data-属性传递额外数据,然后通过target参数访问它们.
重写聚合物示例以添加一个data-incby字段,该字段使值增加计数,如下所示:
<polymer-element name="x-click-counter">
<template>
<button on-click="increment" data-incby="2"> <!-- now passing the value as a data attribute -->
Click Me
</button>
</template>
</polymer-element>
<script>
import 'package:polymer/polymer.dart';
@CustomTag("x-click-counter")
class CounterComponent extends PolymerElement with ObservableMixin {
@observable int count = 0;
void increment(Event event, var detail, var target) {
int incBy = int.parse(target.attributes['data-incby']); // extract the value 2
count = count + incBy;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
Cen*_*giz 14
自克里斯回答以来,Dart和Polymer.dart发生了变化.这是Dart v1.0的更新代码:
<polymer-element name="x-click-counter">
<template>
<button on-click="{{increment}}" data-incby="2"> <!-- now passing the value as a data attribute -->
Click Me
</button>
<span>{{count}}</span>
</template>
</polymer-element>
<script type="application/dart">
import 'package:polymer/polymer.dart';
import 'dart:html';
@CustomTag("x-click-counter")
class CounterComponent extends PolymerElement {
@observable int count = 0;
CounterComponent.created() : super.created();
void increment(Event event, var detail, var target) {
int incBy = int.parse(target.attributes['data-incby']); // extract the value 2
count = count + incBy;
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8856 次 |
| 最近记录: |