ho il seguente modello Emberjs dati:Emberjs dati Come caricare hasMany-Data tardi
App.File = DS.Model.extend({
like: DS.attr('boolean'),
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
file: DS.belongsTo('App.File'),
comment: DS.attr('string')
});
E precaricare con:
App.store.load(App.File, {id: 1, like: false});
Ora ho pensato, se mi vengono i commenti come questo :
var f = App.store.find(App.File, 1);
var c = f.get("comments");
var c è un EmberArray vuoto e una richiesta viene inviata al server. Ma non ho una richiesta? Perché e come devo farlo? Davvero non voglio precaricare i commenti.
ulteriormente più, se posso aggiungere un commento, ma anche modificare il file simultaneamente:
f.get("comments").createRecord({comment: "test"});
f.set("like", true);
App.store.commit();
due richieste vengono inviati al server. Ma se poi restituisco il seguente JSON (per il file):
{ "id": 1, like: true }
Il mio primo commento visibile scompare di nuovo. Perché? E cosa devo fare?
Grazie per il vostro aiuto!
Grazie per la risposta veloce. Ok. Non c'è altro modo? In questo modo si ottengono molto più sql-query per i dati, che nella maggior parte dei casi non sono necessari. E non sarà d'aiuto per il secondo problema, perché la prima richiesta al server è la richiesta di aggiornamento del file. E la seconda richiesta è la richiesta add-comment. Forse funzionerebbe, se aggiungo un secondo commit-command dopo il createRecord. –
Preferirei il meccanismo utilizzato con findQuery. La prima volta che si utilizza l'attributo commenti, una findQuery verrà passata al server. –
Mi sono imbattuto in un problema simile. Sarebbe bello se invece di richiedere gli id per una chiamata findMany, avrebbero supportato il recupero tramite un findQuery utilizzando la chiave esterna. Ho deciso di aggiungere un metodo "getComments" al mio modello che esegue findQuery. – jhorman