2013-03-07 16 views
6

A mio avviso, ho un pulsante che desidero disattivare quando i dati del modello non sono sporchi.bindAttr reverse boolean

Quando output: <button {{ action "update" }} {{bindAttr disabled="isDirty"}}>Save</button> è abilitato quando i dati non sono sporchi e disabilitato quando i dati sono sporchi.

Voglio invertire che così ho provato questo: <button {{ action "update" }} {{bindAttr disabled="!isDirty"}}>Save</button> ma ora non controlla affatto la sporcizia. Come si inverte il valore booleano all'interno di un helper bindAttr?

Ecco il mio codice:

controller

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

Template

{{#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}} 

ho trasmessi i isDirty una proprietà isNotDirty così ho potuto guardarli cambiare. Ma solo la proprietà isDirty cambia quando cambio il valore del campo di testo,

+0

è possibile creare una proprietà calcolata che invertire questo. Si potrebbe fare qualcosa come '... isNotDirty: function() {return! This.get ('content.isDirty'); } .property ('content'), ... 'nel ** controller item ** (' ObjectController') e si collega invece a quella proprietà: '' – MilkyWayJoe

+2

Prova a usare .property ('content.isDirty') Dovrebbe funzionare ora. – mavilein

+0

Funziona, ma quando rimuovo '

{{ isNotDirty }}
' non funziona più: | –

risposta

11

La soluzione può essere trovata nel API-docs di Ember. C'è una lista di tutti gli aiutanti abbreviati disponibili.

Ho usato Ember.computed.not per questo caso:

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