2016-05-24 14 views
1

私はonclickイベントを発生させようとしています。私のコードは次のようになります。ネストされた要素のDartlangポリマーオンクリックイベント

のindex.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                                  

がBSD-によって支配されていますLICENSEファイルに記述されています。
- >

<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 

誰もが、私は仕事にこれを得ることができる方法を知っています? :)

事前に感謝します!

答えて

1

イベントバインディングでは、{{...}}を使用しません。これは値バインディングのみに使用されます。 on-は既にPolymerイベントバインディングを示しており、イベントバインディングはどこにでも関数名を許可するだけであるため、必要なのはこれだけです:

+1

cool!ありがとう。 @Listen( 'settext')を@reflectableに変更しなければならないことがわかりました。実際に更新するスパンの値を取得するには、setTextをset( 'text'、text = "goodbye")に変更する必要がありました。 – ehrt1974

+0

私はすべてのコードを調べなかった。 –

関連する問題