サンプル コードにはいくつかの問題があります。それぞれに対処し、いくつかの問題を解決できることを願っています。
命名規則
まず、命名規則に関する Emberist の投稿をご覧ください。したがって、コメントで提供された JSFiddle では、App.controller
andApp.ATextField
です。
アプリをグローバル変数として宣言する
のインスタンスを作成し、Ember.Application
に割り当てていvar app
ます。グローバル変数を使用する場合は注意が必要ですが、この場合はグローバル名前空間でアプリケーションを定義する必要があるため、App = Ember.Application.create();
それぞれwindow.App = Ember.Application.create();
. アプリをグローバル変数として宣言することで、強力なバインディング機能をテンプレートと JS コードで使用できます。
バインディング
バインディングは、クラスではなくインスタンスで宣言する必要があります。valueBinding
これにより、クラス定義で of を定義するのでApp.TextField
はなく、これをテンプレートなどの具体的なインスタンスに移動することを意味します。
コメントで提供された JSFiddle では、コントローラーを使用していないため、コントローラーへのバインディングが機能しません。特定のコントローラー/オブジェクト/へのバインディングを作成するには、バインドするプロパティ名を宣言する必要があります文字列に追加しますBinding
。ですdisabledBinding: 'App.controller.shouldDisable'
。
例
コードをリファクタリングしました。http://jsfiddle.net/pangratz666/pLpKV/を参照してください。
ハンドルバー:
{{view Ember.TextField
valueBinding="App.tempObj.hold"
disabledBinding="App.controller.shouldDisable"}} {{App.tempObj.hold}}
JavaScript :
App = Em.Application.create();
App.controller = Em.Object.create({
shouldDisable: true
});
App.tempObj = Em.Object.create({
hold: "initial value"
});
// just to illustrate how to define bindings outside of templates,
// we're adding a TextField with bindings setup the same as for the
// template
Ember.TextField.create({
valueBinding: 'App.tempObj.hold',
disabledBinding: 'App.controller.shouldDisable'
}).appendTo('body');