Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将任意数据从Dart polymer web组件传递到click事件处理程序函数_Dart_Dart Webui_Polymer - Fatal编程技术网

如何将任意数据从Dart polymer web组件传递到click事件处理程序函数

如何将任意数据从Dart polymer web组件传递到click事件处理程序函数,dart,dart-webui,polymer,Dart,Dart Webui,Polymer,在Dart的Web UI中,可以向函数传递任意数据以响应事件,例如,以下代码段将值2传递到增量(int incBy)方法以响应按钮的点击事件: 点击我 导入“包:web_ui/web_ui.dart”; 类计数器组件扩展WebComponent{ 无效增量(int incBy){//接受值2 计数=计数+递增; } } 在Polymer(和Polymer.dart)中,单击事件属性需要函数名的字符串版本,而不是实际的函数调用。这在上描述为: 事件处理程序属性的值是方法的字符串名称 在组件上。

在Dart的Web UI中,可以向函数传递任意数据以响应事件,例如,以下代码段将值
2
传递到
增量(int incBy)
方法以响应按钮的点击事件:


点击我
导入“包:web_ui/web_ui.dart”;
类计数器组件扩展WebComponent{
无效增量(int incBy){//接受值2
计数=计数+递增;
}
}
在Polymer(和Polymer.dart)中,单击事件属性需要函数名的字符串版本,而不是实际的函数调用。这在上描述为:

事件处理程序属性的值是方法的字符串名称 在组件上。与传统语法不同,您不能将可执行文件 属性中的代码

使用polymer.dart,这看起来像:


点击我
进口“包装:聚合物/聚合物.dart”;
@CustomTag(“x单击计数器”)
类CounterComponent使用ObservaleMixin扩展了聚合关系{
@可观测整数计数=0;
无效增量(事件、变量细节、变量目标){//如何将2传递给此函数?
计数=计数++;
}
}

问题:如何将任意值传递给
增量
函数?

您可以使用html
数据-
属性传递额外数据,然后通过
目标
参数访问它们

重新编写polymer示例以添加一个
数据incby
字段,该字段采用计数依据的值增量,如下所示:


点击我
进口“包装:聚合物/聚合物.dart”;
@CustomTag(“x单击计数器”)
类CounterComponent使用ObservaleMixin扩展了聚合关系{
@可观测整数计数=0;
无效增量(事件、变量详细信息、变量目标){
int incBy=int.parse(target.attributes['data-incBy']);//提取值2
计数=计数+递增;
}
}

自Chris回答后,Dart和Polymer.Dart发生了变化。以下是Dart v1.0的更新代码:


点击我
{{count}}
进口“包装:聚合物/聚合物.dart”;
导入“dart:html”;
@CustomTag(“x单击计数器”)
类计数器组件扩展了聚合关系{
@可观测整数计数=0;
CounterComponent.created():super.created();
无效增量(事件、变量详细信息、变量目标){
int incBy=int.parse(target.attributes['data-incBy']);//提取值2
计数=计数+递增;
}
}

我的聚合物0.11.0+5解决方案

element.html

  • {{item}
进口“包装:聚合物/聚合物.dart”; 导入“view.dart”; 导入“dart:html”; @CustomTag('dp-element') 类DpElement扩展了聚合关系{ @可观察的清单项目; DpElement.created():super.created(){ } 无效负载(事件、变量详细信息、变量目标){ 字符串incBy=target.attributes['data-incBy']; 印刷(印行); } }
@Cengiz对其他人的答案进行实质性修改被认为是不合适的,即使这完全是错误的。相反,请用您的更改发布一个新的答案。对于'data xxx'属性
target.dataset
可能比
target.attributes
更好。我喜欢在React JSX中,您只需在JS中编写函数调用,而不用这样做。您也可以看看我对这个问题的回答。Polymer隐式地将项目分配给
  • 我对链接问题的回答显示了如何获得该值。
    <link rel="import" href="../packages/polymer/polymer.html">
    <polymer-element name="dp-element">
      <template>
        <div class="row">
        <ul>
          <template repeat="{{ item in items }}">
            <li on-click="{{load}}" data-incby="{{item}}">{{ item }}</li>
          </template>
        </ul>
    
      </template>
    
     <script type="application/dart">
      import 'package:polymer/polymer.dart';
      import 'view.dart';
      import 'dart:html';
    
      @CustomTag('dp-element')
      class DpElement extends PolymerElement {
    
      @observable List<String> items;
    
      DpElement.created() : super.created(){
      }
      void load(Event event, var detail, var target) {
         String incBy = target.attributes['data-incby'];
         print(incBy);
      }
    }