0

Emberjsが提案するように、要素の値/属性などをコントローラーにバインドするには、Emberjsを使用してその要素を作成する必要があります。例えば:

App.SearchTextField = Em.TextField.extend({ });

とビュー:

{{view App.SearchTextField placeholder="Twitter username"
                           valueBinding="App.tweetsController.username"}}

これは、ページのコンテンツのほとんどすべてがEmberjsの管理下にある必要があることを意味します。これはあまり便利ではありません。

既存の要素に任意のタイプの値またはイベントバインディングを実行することは可能ですか?

4

1 に答える 1

1

バインディングが機能するためには、Ember はバインドされた値がいつ変更されたかを認識して同期する必要があります。値が変更されたことを Ember が知るには、 を使用する必要がありますEmber.set。例:

object.set('value', 'I changed'); 
// This says: Ember, my value has changed, please sync!

そのため、特定のプロパティが を使用せずに変更された場合Ember.set、Ember はそれを同期する必要があることを知りません。その結果、このイベントの変更をリッスンし、 を使用して変更されたことを Ember に伝える必要がありますEmber.set

それが入力値で起こることです。入力すると、値が変更されますが、Ember.set呼び出されませんでした。したがって、これらのイベントの1つが発生したときに、これらのイベントと呼び出しをEmber.TextFieldリッスンします。keyupchangeEmber.set

もちろん、それらを使用する必要はありません、これらの変更を手動でリッスンし、値が変更されたことを Ember に伝える必要があります: this.set('value', this.$().val()))

Ember.TextFieldほとんど何でもできるので、使用に問題がある理由がわかりません。イベントを自分で聞く手間が省けます。

役立つかもしれないことの 1 つは、ビューを作成して拡張する代わりに、テンプレートで直接使用できることです。

{{view Em.TextField placeholder="Twitter username" valueBinding="username" type="search"}}

これは、次のタイプとほぼ同じ量です。

<input type="search" placeholder="Twitter username" value="some value" />

注: 上記の例から、古いチュートリアルに従っているように見えます。注意してください。それ以降、多くの変更が加えられています。

于 2013-02-28T12:02:37.860 に答える