サンプルコードにいくつかの問題がありますが、それぞれを解決し、いくつかの問題を解決できることを願っています。
条約命名
まず第一に、あなたはnaming conventionsについてEmberistのポストを見ている必要があります:クラスは、大文字と小文字のインスタンス命名されなければならない - アプリケーションや名前空間の例外を。あなたの提供するJSFiddleのcommentはApp.controller
とApp.ATextField
です。
あなたはEmber.Application
のインスタンスを作成し、var app
に割り当てている
グローバル変数としてアプリケーションを宣言する。グローバル変数を使用する場合は注意が必要ですが、この場合はグローバル名空間にアプリケーションを定義する必要があります。したがって、
App = Ember.Application.create();
とそれぞれ
window.App = Ember.Application.create();
である必要があります。アプリケーションをグローバル変数として宣言すると、テンプレート内の強力な
バインド機能とJSコードを使用できます。
バインディング
バインディングはクラスのインスタンスではなく上で宣言する必要があります。これにより、App.TextField
のvalueBinding
をクラス定義に定義するのではなく、具体的なインスタンス(テンプレートなど)に移動することを意味します。
commentで提供されている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');
私はあなたがこの質問を投稿したときに何をしていたのか分かりませんが、コントローラのバインディングなしでビュー内で無効なプロパティを定義することは間違いありません。 – asaf000