2012-03-26 9 views
8

Ember.jsで足を濡らしているだけで、私は理解できないと確信しています。Ember.jsのボタンのバインドを有効にした状態

私は選択されたオブジェクトコントローラを持っています。これにはコンテンツがあり、これは現在選択されているモデルであるEmber.Objectです。モデルにはプロパティ(isDirty)があります。基本的には、フォーム上の保存ボタンを有効にするには、オブジェクトが汚れていて保存する必要がある場合のみ有効にしてください。

私はフォームをうまくバインドすることができましたが、保存ボタンのisEnabledBindingプロパティは何もしていないか、バインディングを正しく接続していません。

私は基本的なセットアップを示すjsfiddleを用意しました。

http://jsfiddle.net/blargity/fqc73/1/

どのように私はisDirtyがtrueの場合にのみ、ボタンが有効にするのですか?バインディングは、選択したオブジェクトコントローラのコンテンツプロパティが変更された場合にも機能します。

答えて

10

にはisEnabledというプロパティがありません。 disabledプロパティにバインドする必要があります。

これを処理するカスタムEmber.Buttonを作成することも可能です(http://jsfiddle.net/LabpW/を参照)。

ハンドル

{{#view App.SaveModelButton modelBinding="model"}}Save{{/view}} 

JavaScriptの

App.SaveModelButton = Ember.Button.extend({ 
    disabledBinding: Ember.Binding.not('model.isDirty') 
}); 

使用Ember.Binding.notは次のようになり、独自の計算された財産を、書くための単なるショートカットです:

App.SaveModelButton = Ember.Button.extend({ 
    disabled: function() { 
     return !Ember.getPath(this, 'model.isDirty'); 
    }.property('model.isDirty').cacheable() 
}); 

は、私もあなたのコードは少しリファクタリング:

  • あなたがcreateextendを混合:クラスのインスタンスのためのcreateextendを使用しています。 this

  • についての良いブログの記事がありますそれは私がこれを行う方法を見つけ、それはApp.controller代わりのApp.Controller

+0

私のスタイルの問題を解決してくれてありがとうございました。 – KevinBrownTech

+0

これは素晴らしいですが、最近のEmberのEmber.Buttonに関する廃止予定の警告があります。 (私はv1.0.pre-48-g138fbdfを使用しています) – webjprgm

14

する必要がありますので、クラスのインスタンスのための大文字と小文字を使用することが慣習のようなものです今は廃止されたEmber.Buttonを使用せずに。ビューで

<button {{action "save" target="controller"}} {{bindAttr disabled="view.isNotDirty"}}>Save</button> 

:ハンドルテンプレートで

isNotDirty: function(){ 
    return !this.get('controller.content.isDirty') 
}.property('controller.content.isDirty').cacheable() 

(私が持っているエンバーのバージョンでは、Ember.Binding.notは存在しません。おそらく更新する必要があるかもしれませんが、ドキュメントには表示されないため、実際には削除されている可能性があります)

+2

Ember 1.4.0-beta.6では、正しいバインディングは '{{bind-attr disabled = ...}}' – jevon

+0

です。通常、bind-attrは次のようになります。コントローラー内のプロパティーで使用されますが、プロパティー自体はビュー自体にあります。この答えは、これを行う方法( 'view。'プレフィックスを使用)を正確に示すのですばらしいです。 –

関連する問題