2015-06-22 15 views
20

Ho il seguente codice:aggiungere dinamicamente oggetto js a matrice modello 1.13

var msg = this.store.createRecord({text:'first title', createdAt: "2015-06-22T20:06:06+03:00" }) 

this.get('model.content').pushObject(msg); 

msg.save(); 

Creiamo nuovo record. Quindi inserirlo al modello da visualizzare. Ha funzionato perfettamente nella versione 1.9, ma dopo l'aggiornamento alla più recente 1.13 rompe e mostra questo errore:

TypeError: internalModel.getRecord is not a function

dopo alcune ricerche sono uscito a questa soluzione

this.get('messages.content').unshiftObject(message.internalModel); 

ed è parzialmente d'aiuto. Ora ho due problemi:

  • io non sono sicuro se si utilizza API dati brace privata è una buona idea
  • ho un fastidioso ritardo tra l'aggiunta di registrazione per il modello e rendendolo sullo schermo. Più di questo se non chiamo msg.save(); il record non è reso. Quindi, per quanto ho capito, aspetta fino a quando non abbiamo ricevuto risposta dal server e solo dopo lo rende. Ma ho bisogno di un comportamento opposto: prima devo mostrare il record e quindi salvarlo (mostrando lo stato di salvataggio per l'utente), in questo modo l'utente pensa che tutto sia estremamente veloce.
+0

ciò che è modello e ciò che è contenuto qui? – Kingpin2k

+0

Stai usando 1.13.x, dove x è ciò che è per i dati di ambra e di scuro? –

+0

Sì, Ember 1.13.2 e Ember Data 1.13.4 –

risposta

8

Una soluzione possibile senza ricorrere a privato API è quello di utilizzare toArray() (github issue):

var array = this.get('messages').toArray() 
array.addObjects(this.get('messages')) 
array.addObject(msg) 
this.set('messages', array) 
8

Prima 1.13:

this.get('content').pushObjects(messages); 

Dopo 1.13:

messages.forEach(functio(message) { 
    this.get('model.content').pushObject(message._internalModel); 
}); 
0

I farebbe tutti i modelli di ritorno a matrice poi, aggiungere array per questo array

setPeople:function(){ 
    this.set('people',this.get('content').toArray()) 
}.observes('content') 

poi, trovare altri modelli di persona, ad un array

getMoreUsers(){ 
     var self = this; 
      this.set('offset', this.get('offset')+1); 
      self.store.findAll('person').then(function(people){ 
      self.get('people').pushObjects(people.toArray()); 
      });