2013-11-15 6 views
12

Il mio problema principale con Ember Data, al momento, è che quando cambio una relazione (hasMany o belongsTo), il genitore non si sporca.Come faccio a rendere il genitore sporco quando cambio una relazione hasMany/belongs-in in Ember-Data?

ho bisogno di questo perché:

  • sto a seconda della proprietà isDirty per mostrare un pulsante salvare/annullare
  • hasMany e belongsTo id vengono inviati con il genitore, in modo che il genitore, infatti IS sporco.

Inoltre, quando eseguo il rollback del genitore, vengono annullate solo le relazioni OwnTo. I modelli di hasMany rimangono gli stessi.

Ho trovato this issue che parla di un hook dirtyRecordsForHasManyChange, ma che non sembra esistere in Ember Data v1 (v1.0.0-beta.3, che è quello che sto usando).

Come posso realizzare questo?

Grazie.

risposta

4
this.get('model').send('becomeDirty'); 

Questo dovrebbe fare questo trucco. Invia sendDirty al modello principale.

10

Per una proprietà, ho aggiunto un osservatore.

Ad esempio nel mio ho una persona con una provincia di appartenenza. Sulla mia forma ho una scelta ember per le province. Nel modello persona aggiungo questo osservatore ...

provinceChanged: function() { 
    this.send('becomeDirty'); 
}.observes('province') 

anch'io sto a seconda IsDirty per mostrare/nascondere i tasti Save/Cancel, e mentre quello osservatore fa un buon lavoro al segnando il record come sporco, se io premi Annulla, eseguo il rollback, ma devo anche contrassegnare il record pulito. Lo faccio nel controller Persona sulla mia azione di annullamento.

cancel: function() { 
    this.get('model').rollback(); 
    this.set('isEditing', false); 
    this.get('model').adapterWillCommit(); 
    this.get('model').adapterDidCommit(); 
} 

Tutto sembra funzionare piuttosto bene.

Per hasMany su un altro progetto abbiamo utilizzato una proprietà calcolata sul controller.

isThisOrChildrenDirty: function() { 
    return this.get('isDirty') || this.get('authors').get('isDirty'); 
}.property('isDirty','[email protected]') 

Poi invece di controllare IsDirty Controlliamo isThisOrChildrenDirty.

Spero che sia utile.

+1

Ehi spDuchamp, ho provato il tuo primo esempio di codice su una relazione di molti. Funziona, ma il mio record padre diventa macchiato immediatamente dopo aver caricato un record genitore con i bambini. Mi chiedo se c'è un modo per colorare il record padre solo quando viene modificato un bambino, non quando la relazione è inizialmente popolata. –

Problemi correlati