2016-11-09 6 views
0

マイコード:Parentプロパティは、子にバインドされていません(エンバー2.8)

signup.emblem:

= validating-form onsubmit=(action 'signUp') 
    = input-field value=username 
    span {{usernameError}} 

検証し-form.js:

submit(event) { 
    console.log(this.get('username') //undefined 
    this.sendAction('onsubmit') 
} 

signup.js:

actions: { 
    signUp() {  
     console.log(this.get('username')) // value from input 
    } 
    } 

ご覧のとおり、基本的な考え方は入力値ですvalidating-formコンポーネントで検証され、すべてがうまくいけば、何らかのコントローラアクションを呼び出すか、いくつかのプロパティを設定します。

問題は明らかに、このフォームコンポーネントは、その子コンポーネント(input-field)がコントローラであるにもかかわらず、コントローラのプロパティにバインドされていないということです。ここで何が間違っているのか教えていただけますか?

明示的にバインドする必要がある場合は、複数のプロパティを同時に使用する方法がありますか?

答えて

0

問題は、標準入力要素がusername変数に双方向でバインドされていないことです。 actionmutヘルパーを使用すると、すぐにバインドできます。

(ハンドルバーの例がありますが、簡単に十分なエンブレムに変換することができるはずです)

<input value={{username}} onblur={{action (mut username) value='target.value'}}> 

これは言っている:のonblurイベントの

  • MUT(食べました)ユーザー名
  • 現在の入力と一致するtarget.value - 入力ボックスの値

あなたは他のオプションは、彼らがデータダウンアクションの現在のエンバーの考え方をフォローアップしていないとして、私は、これらを使用していませんでしたInput Helpers

あるこのtwiddle

にこの作業の証拠を見ることができます

{{input value=username}} 

これは、直接ユーザー名と双方向バインドされます。

+0

私の入力フィールドコンポーネントでは、すでに双方向バインドを可能にする入力ヘルパーを使用しています。 'login'コントローラでうまく動作し、' validating-form'で壊れます(コンポーネントはそれ自身の使い方でオーバーライドします)、 'input-field'で再びうまく動作します。 – Senthe

+0

さて、私は何が起こっているのだろうと思うのは、変数がコンポーネントとコントローラの間で混在するので、変数は両方の場所に存在しないということです。フォームがコンポーネント内にあり、コントローラ内で検証関数を呼び出す場合は、検証関数をコンポーネントに渡す必要があります。 – JonRed

+0

私はコントローラーもコンポーネントだと思っていました。しかし、私は間違っていました。 – Senthe

関連する問題