2013-03-07 53 views
6

在我看來,我有一個按鈕,我想被禁用時,模型的數據是不髒。bindAttr反向布爾

當我輸出:<button {{ action "update" }} {{bindAttr disabled="isDirty"}}>Save</button>當數據是不髒當數據是髒的被啓用,和禁用。

我要扭轉,所以我嘗試這樣做:<button {{ action "update" }} {{bindAttr disabled="!isDirty"}}>Save</button>但現在是不檢查dirtyness可言。如何反轉bindAttr幫助器中的布爾值?

這裏是我的代碼:

控制器

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'); } .property('content'),...'在**項目控制器**('ObjectController')中,並綁定到該屬性:'' – MilkyWayJoe 2013-03-07 15:38:05

+2

嘗試使用.property( 'content.isDirty') 現在應該工作。 – mavilein 2013-03-07 15:53:38

+0

這可行,但是當我刪除'

{{ isNotDirty }}
'時,它不再工作: – 2013-03-07 16:20:33

回答

11

可以在Ember的API-docs中找到解決方案。有一個所有可用的速記助手的列表。

我用Ember.computed.not這種情況:

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