2012-05-09 13 views
5

Em.TextFieldで無効な属性を検出しましたが、無効にしたプロパティをtrueに設定して拡張した後でTextFieldを再度有効にすることはできません。Emberjs - TextFieldを無効にして有効にする

var app = Em.Application.create(); 
app.randomObj = Em.Object.create({ 
    temp: null 
}); 
app.textField = Em.TextField.extend({ 
    valueBinding: 'app.randomObj.temp', 
    disabled: true 
}); 

Emberで無効にしたプロパティを削除するにはどうすればよいですか?

+0

私はあなたがこの質問を投稿したときに何をしていたのか分かりませんが、コントローラのバインディングなしでビュー内で無効なプロパティを定義することは間違いありません。 – asaf000

答えて

7

サンプルコードにいくつかの問題がありますが、それぞれを解決し、いくつかの問題を解決できることを願っています。

条約命名

まず第一に、あなたはnaming conventionsについてEmberistのポストを見ている必要があります:クラスは、大文字と小文字のインスタンス命名されなければならない - アプリケーションや名前空間の例外を。あなたの提供するJSFiddleのcommentApp.controllerApp.ATextFieldです。

あなたはEmber.Applicationのインスタンスを作成し、var appに割り当てている

グローバル変数としてアプリケーションを宣言する。グローバル変数を使用する場合は注意が必要ですが、この場合はグローバル名空間にアプリケーションを定義する必要があります。したがって、 App = Ember.Application.create();とそれぞれ window.App = Ember.Application.create();である必要があります。アプリケーションをグローバル変数として宣言すると、テンプレート内の強力な バインド機能とJSコードを使用できます。

バインディング

バインディングはクラスのインスタンスではなく上で宣言する必要があります。これにより、App.TextFieldvalueBindingをクラス定義に定義するのではなく、具体的なインスタンス(テンプレートなど)に移動することを意味します。

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'); 
+0

うわー、これは私が期待していた以上のものです。実際に問題を説明する時間をとってくれてありがとう、本当に感謝しています。 – mlienau

2

コントローラーにバインドして自由に切り替えます。無効はバインドされた属性なので、プロパティが変更されると、テンプレートが更新されます。

+0

私はそれをコントローラにバインドするとき、私はHTMLの ' 'Edit:[fiddle](http://jsfiddle.net/RPWnX/)を追加しました – mlienau

+1

この場合、バインディングパスは 'Binding'で終わる別のプロパティに設定します。 –

+0

ありがとうございました! – mlienau

関連する問題