2014-08-29 44 views
1

我很高興能夠開始使用紙質元素,但我在表單元素提交方面遇到了一些問題。在以下情況:是否有相當於紙張輸入的提交?

<!DOCTYPE html> 
<link rel="import" href="packages/polymer/polymer.html"> 
<link rel="import" href="packages/paper_elements/paper_input.html"> 
<polymer-element name="c2button-element"> 
<template> 
    <paper-input value="{{myname}}" floatinglabel="true" label="enter your name" on-change="{{nameSubmitted}}"></paper-input> 
</template> 
<script type="application/dart"> 
import 'dart:html'; 
import 'package:polymer/polymer.dart'; 


@CustomTag('c2button-element') 
class C2Button extends PolymerElement { 
    @observable String myname = "Simon"; 

    void nameSubmitted(Event e, var detail, Node target) { 
    print("Being called with event $e for $myname"); 
    } 

    C2Button.created() : super.created(); 
    @override void attached() { super.enteredView(); } 
    @override void detached() { super.leftView(); } 
} 
</script> 
</polymer-element> 

我想要輸入的行爲是按enter或模糊輸入每次打電話nameSubmitted。實際情況是,只有在改變了myname的值(這並不令人意外,因爲我已註冊到on-change)後,我是否會得到一個要觸發的事件,但它會觸發兩次!改變從SimonmynameEdwin和壓制之後進入:

Being called with event Instance of 'CustomEvent' for Edwin 
Being called with event Instance of 'Event' for Edwin 

我需要做別的事情,比如寄存器on-keypress和過濾器回車鍵?我的第一次嘗試仍然遭受類似的被稱爲兩次的問題。第一次按回車,myname仍然包含舊值,好像紙張輸入尚未提交新值 - 是否由於驗證?

<paper-input value="{{myname}}" floatinglabel="true" label="enter your name" on-keypress="{{nameSubmitted}}"></paper-input> 

void nameSubmitted(KeyboardEvent e, var detail, Node target) { 
    if (e.keyCode != 13) {return;} 
    print("Being called with event $e for $myname"); 
} 

變爲Edwin之後,按輸入兩次:

Being called with event Instance of 'KeyboardEvent' for Simon 
Being called with event Instance of 'KeyboardEvent' for Edwin 

回答

0

什麼工作對我來說是過濾上輸入(如上),並改變了我的結合inputValue而不是value

<paper-input inputValue="{{myname}}" floatinglabel="true" label="enter your name" on-keypress="{{nameSubmitted}}"></paper-input> 

雖然我對這個解決方案並不滿意(因爲紙質元素的驗證功能我失敗了),所以我肯定願意接受更好的答案。