Non ho mai capito del tutto la se necessario parte della descrizione.In che modo differisce esattamente fetchAllIfNeeded da fetchAll nel JS SDK?
.fetchAll()
Rileva l'elenco specificato di Parse.Object.
.fetchAllIfNeeded()
recupera la lista data di Parse.Object se necessario.
Qual è la situazione in cui posso utilizzare questo e cosa determina esattamente la necessità? Sento che è qualcosa di super elementare, ma non sono stato in grado di trovare una definizione soddisfacente e chiara.
Nell'esempio nell'API, ho notato che il fetchAllIfNeeded()
ha:
// Objects were fetched and updated.
nel successo mentre il fetchAll
deve solo:
// All the objects were fetched.
così fa il fetchAllIfNeeded()
anche salvare roba troppo? Molto confuso qui.
AGGIORNAMENTI
TEST 1
Andando su alcuni dei suggerimenti @danh lasciati nei commenti ho provato le seguenti cose.
var todos = [];
var x = new Todo({content:'Test A'}); // Parse.Object
todos.push(x);
x.save();
// So now we have a todo saved to parse and x has an id. Async assumed.
x.set({content:'Test B'});
Parse.Object.fetchAllIfNeeded(todos);
Quindi, in questo scenario, il mio cliente x
è diverso da quello del server. Ma lo x.hasChanged()
è falso poiché abbiamo utilizzato la funzione set
e l'evento di modifica è stato attivato. fetchAllIfNeeded
non restituisce risultati. Quindi non è che stia cercando di confrontare questo a titolo definitivo con ciò che è sul server per sincronizzare e recuperare.
Mi accorgo che nel carico utile della richiesta, l'esecuzione del fetchAllIfNeeded
sta inviando la seguente cosa interessante.
{where: {objectId: {$in: []}}, _method: "GET",…}
così sembra che sul lato client qualcosa determina se un oggetto deve sempre essere presente
Test 2
Così ora, sulla base dei commenti che ho provato manipolare la changed
stato dell'oggetto impostando con silenzioso.
x.set({content:'Test C'}, {silent:true});
x.hasChanged(); // true
Parse.Object.fetchAllIfNeeded(todos);
Ancora niente di interessante. Chiaramente lo stato del server ("Test A") è diverso da clientide ("Test C"). e ho ancora i risultati []
e la richiesta di carico utile è:
{where: {objectId: {$in: []}}, _method: "GET",…}
UPDATE 2
capito, cercando alla fonte Parse. Vedi la risposta.
Un'ipotesi è che il "se necessario" si riferisce alla spina dorsale cambiamento oggetto evento/attributo (http://backbonejs.org/#Model -cambiato). Il fetchAll incondizionato aggiornerà tutto, attivando gli eventi di modifica per tutti gli oggetti. La varietà, se necessario, fa più lavoro per cambiare solo gli oggetti il cui stato è diverso dallo stato del server e modificare il loro attributo 'cambiato'. – danh
Grazie per i suggerimenti. Mi ha fatto iniziare a testare alcune cose. Si scopre che non si tratta della proprietà del cambiamento. Riguarda se ci sono attributi e valori oppure no. Ha principalmente a che fare con casi in cui hai figli nidificati che non sono inclusi in una query dei genitori. Vedi la mia risposta qui sotto. – jmk2142