2015-11-09 12 views
6

Supponiamo quindi di disporre di un modello utente impostato su un'API abbastanza standard. Sul front-end c'è un progetto Ember che ha anche quel modello User. La chiamata creazione normale sarebbe qualcosa di simile al seguente:Posso POSTARE più modelli utilizzando Dati di bordo?

store.createRecord('user', {email: '[email protected]'}).save(); 

Questo avrebbe mandato fuori una richiesta POST a qualcosa di simile /api/users. Tuttavia, un supporto API piuttosto esteso è la creazione di più modelli contemporaneamente. Quindi, per esempio, invece della chiamata POST basta inviare un singolo oggetto sotto user: {email: '[email protected]'} invierebbe un array di oggetti come users: [{email: '[email protected]'}, {email: '[email protected]'}, ...].

Come ho visto questo gestito in ember è solo fare più chiamate di creazione in fase di esecuzione. Tuttavia, questo è terribilmente inefficiente e mi chiedo se Ember supporti il ​​salvataggio di più modelli contemporaneamente? Come lo otterresti in Ember?

risposta

0

Se stai chiedendo specificamente di Ember Data, non conosco alcun modo per farlo (non penso sia possibile utilizzare alcun equivalente di save() su una raccolta/array). Potrebbero esserci librerie di dati alternative che potrebbero funzionare (per esempio è possibile controllare Orbit.JS - che è qualcosa che non ho ancora fatto)

Il modo in cui l'ho fatto per avere un endpoint personalizzato sul mio backend che riceve un certo carico utile JSON e crea le risorse. Lo fai inviando una normale chiamata ajax, vedi questo esempio (da un mio progetto).

let content = //get content that you want to post 
let accessToken = this.get('session.session.authenticated.token'); 
Ember.$.ajax({ 
    data: JSON.stringify(content), 
    dataType: 'json', 
    method: 'POST', 
    url: 'path/to/my/custom/end/point', 
    headers: { 
     'Content-Type': 'application/json', 
     'Authorization': `Beader ${accessToken}` 
    } 
    }).then((result) => { 
    // Code for success 
    }, (jqXHR) => { 
    // Code for error 
    }).always(() => { 
    // Code for always/finally 
    }); 

Come si può vedere questo è tutto il codice personalizzato, non sfruttando l'archivio oi modelli di Ember Data. Finora non ho trovato una risposta migliore.

EDIT: dopo aver visto la risposta di andorov. Ho dimenticato di menzionare qualcosa. Sto usando Ember Data 2.0 (JSONAPI per impostazione predefinita) e EmbeddedRecordsMixin does not work proprietà con JSON API

2

Non è possibile salvare una matrice di modelli in una singola richiesta POST Ember Data mentre la descrivi, tuttavia esiste un modo.

È possibile salvare un modello principale che hasMany 'user' con lo EmbeddedRecordsMixin, che includerà ID di relazione o record completi. Il vostro serializzatore sarà simile -

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    users: { embedded: 'always' }, 
    } 
}); 

A seconda del caso d'uso può essere utile per creare un modello di genitore solo per questo scopo, che hasMany 'user'. Se si desidera utilizzare un modello esistente e non sempre si desidera incorporare i propri record utente, esiste una risposta here.

Se si decide di salvare i modelli singolarmente, si consiglia di eseguire users.invoke('save'), che attiverà un POST per ciascun modello.

Problemi correlati