2013-03-07 10 views
6

私の見解では、モデルのデータが汚れていないときに無効にしたいボタンがあります。bindAttr reverse boolean

出力時:<button {{ action "update" }} {{bindAttr disabled="isDirty"}}>Save</button>データが汚れていない場合は有効になり、データが汚れている場合は無効になります。

私はこのことを逆にしたいので、これを試しました。<button {{ action "update" }} {{bindAttr disabled="!isDirty"}}>Save</button>しかし、今は汚れをチェックしていません。 bindAttrヘルパー内のbooleanをどのように逆にするのですか?

コントローラ

App.SiteController = Em.ObjectController.extend({ 
    isNotDirty: function() { 
     return !this.get('isDirty'); 
    }.property('content') 
}); 
App.SiteEditController = Em.ObjectController.extend({ 
    needs : [ 'site' ] 
}); 

テンプレート

{{#with controllers.site}} 
    <div>{{ isDirty }}</div> 
    <div>{{ isNotDirty }}</div> 
    <div class="control-group"> 
     <label class="control-label" for="name">Name</label> 
     <div class="controls"> 
      {{view Ember.TextField valueBinding="name"}} 
     </div> 
    </div> 
    <div class="form-actions"> 
     <button {{bindAttr disabled="isNotDirty"}} class="btn btn-primary">Save</button> 
    </div> 
{{/with}} 

私は彼らが変更を見ることができるように、私はisDirtyisNotDirtyプロパティを出力:

は、ここに私のコードです。テキストフィールドの値を変更すると、isDirtyプロパティのみが変更されます。

+0

をあなたはそれを反転計算されたプロパティを作成することができます。 '... isNotDirty:function(){return!this.get( 'content.isDirty');のようなことができます。 ** 'itemController **( 'ObjectController')の中で.property(' content ')、...'を呼び出してそのプロパティにバインドしてください: '{button {{action" update "}} {{bindAttr disabled =" "0}">}}> Save ' – MilkyWayJoe

+2

.property( 'content.isDirty')を使用してください。 これで動作します。 – mavilein

+0

これは動作しますが、 '

{{ isNotDirty }}
'を削除するともう動作しません。 –

答えて

11

解決策はEmberのAPI-docsにあります。利用可能なすべての短縮形計算ヘルパーのリストがあります。

私はこのような場合のためにEmber.computed.notを使用:

App.SiteController = Em.ObjectController.extend({ 
    isNotDirty: Ember.computed.not('isDirty') 
});