5

そのため、最近、Em.TextFieldでdisabled属性を見つけましたが、disabledプロパティをtrueに設定して拡張した後、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で無効なプロパティを削除するにはどうすればよいですか?

4

2 に答える 2

7

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

命名規則

まず、命名規則に関する Emberist の投稿をご覧ください。したがって、コメントで提供された JSFiddle では、App.controllerandApp.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');
于 2012-05-10T06:55:05.947 に答える
2

コントローラーにバインドすると、自由に切り替えることができます。Disabled はバインドされた属性であるため、プロパティが変更されると、テンプレートが更新されます。

于 2012-05-09T23:46:11.993 に答える