嵌套元素中的 Dartlang polymer 点击事件

标签 dart polymer dart-polymer

我正在尝试触发 onclick 事件。我的代码如下所示:

索引.html:

<!--                                                                                                                                                                                                               
  Copyright (c) 2016, <your name>. All rights reserved. Use of this source code                                                                                                                                    
  is governed by a BSD-style license that can be found in the LICENSE file.                                                                                                                                          
-->

<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">   
  <meta name="scaffolded-by" content="https://github.com/google/stagehand">
  <title>polymer_test_project_2</title>

  <!-- Add to homescreen for Chrome on Android -->  
  <meta name="mobile-web-app-capable" content="yes">
  <link rel="icon" sizes="192x192" href="images/touch/chrome-touch-icon-192x192.png">

  <!-- Add to homescreen for Safari on iOS -->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="apple-mobile-web-app-title" content="Web Starter Kit">
  <link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png">

  <!-- Tile icon for Win8 (144x144 + tile color) -->
  <meta name="msapplication-TileImage" content="images/touch/ms-touch-icon-144x144-precomposed.png">
  <meta name="msapplication-TileColor" content="#3372DF">

  <!--  Polyfill of Custom Elements and HTML Imports -->
  <script src="packages/web_components/webcomponents-lite.min.js"></script>

  <script defer type="application/dart" src="index.dart"></script>
  <script defer src="packages/browser/dart.js"></script>

  <!-- example of using a paper element -->
  <link rel="import" href="packages/polymer_elements/roboto.html">

  <link rel="stylesheet" href="styles.css">
</head>

<body unresolved>
  <main-app></main-app>
</body>
</html>

index.dart:
// Copyright (c) 2016, <your name>. All rights reserved. Use of this source code                                                                                                                                   
// is governed by a BSD-style license that can be found in the LICENSE file.                                                                                                                                       
library my_project.web.index;

import 'package:polymer_test_project_2/main_app.dart';
import 'package:polymer/polymer.dart';

/// [MainApp] used!                                                                                                                                                                                                
main() async {
  await initPolymer();
}

main_app.html:
<!--                                                                                                                                                                                                               
  Copyright (c) 2016, <your name>. All rights reserved. Use of this source code                                                                                                                                    

受可以在 LICENSE 文件中找到的 BSD 样式许可证的约束。
-->

<dom-module id="main-app">
  <style>
    :host {
      display: block;
    }
  </style>

  <template>
    <paper-input label="Type something..." value="{{text}}"></paper-input>
    <p>
      Text: <span>{{text}}</span><br />
      Reversed: <span>{{reverseText(text)}}</span>
    </p>
    <my-component>
    </my-component>
  </template>
</dom-module>

main_app.dart:
@HtmlImport('main_app.html')

library polymer_test_project_2;
import 'dart:html';

import 'package:polymer_elements/paper_input.dart';
import 'package:polymer_elements/paper_button.dart';
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';

part 'my_component.dart';

/// Uses [PaperInput]                                                                                                                                                                                              
@PolymerRegister('main-app')
class MainApp extends PolymerElement {
  @property
  String text;

  MyComponent myComponent;

  /// Constructor used to create instance of MainApp.                                                                                                                                                              
  MainApp.created() : super.created();

  @reflectable
  String reverseText(String text) {
    return text.split('').reversed.join('');
  }
}

my_component.html:
<dom-module id="my-component">
  <template>
    <span>foobar</span>
    <span>{{text}}</span>
    <paper-button on-click="{{ settext }}">setText</paper-button>
  </template>
</dom-module>

和 my_component.dart:

@HtmlImport('my_component.html')
polymer_test_project_2 的一部分;
@PolymerRegister('my-component')
class MyComponent extends PolymerElement {
  @property
  String text="hello";

  MyComponent.created() : super.created() {
    print("mycomponent created");
  }

  @Listen('settext')
    void setText([_, __]) {
    print("text set to goodbye");
    text="goodbye";
  }
}

目前,按钮显示在我的组件中,但是当我点击按钮时,错误消息来了:
[my-component::_createEventHandler]: listener method `{{ settext }}` not defined

有人知道我怎样才能让它工作吗? :)

提前谢谢了!

最佳答案

对于事件绑定(bind),不要使用 {{...}} ,这仅用于值绑定(bind)。 on-已经表明 Polymer 事件绑定(bind)和事件绑定(bind)只允许在任何地方使用函数名称,因此这就是所有必要的:

<paper-button on-click="settext">setText</paper-button>

关于嵌套元素中的 Dartlang polymer 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414340/

相关文章:

dart - 如何从Dart书架式静态文件处理程序为聚合物应用程序提供服务?

android - 如何从 Flutter 中的 Intent 加载图像?

jquery - Firefox css 显示问题

dart - 如何重新排列 polymer 模板化的内容?

dart - 如何在 Polymer.dart 中的自定义元素内注册 PolymerExpression 过滤器?

Dart PolymerElement 事件总线

flutter - 从 Firestore 检索数据并在 GridView.builder flutter 中显示

android - 在后台更新位置?

http - 如何在 flutter 中使用 session 用户?

javascript - polymer : "Prev"或 "Next"按钮不循环浏览页面