2014-10-15 15 views
7

Definizione di this.isSimulation:Meteor: Quando è questa.isSimulazione più utile di Meteor.isClient?

Access inside a method invocation. Boolean value, true if this invocation is a stub. 

Definizione Meteor.isClient:

Boolean variable. True if running in client environment. 

In quali situazioni sarebbe this.isSimulation essere utile? Perché non posso usare sempre Meteor.isClient?

sto usando Meteor.isClient per verificare se un documento cliente è sincronizzato con il server utilizzando questa struttura semplice schema:

unsynced: { 
    type: Boolean, 
    autoValue: function() { 
    return Meteor.isClient; 
    } 
} 

E sembra funzionare, ma altri hanno detto uso this.isSimulation, tranne che farlo qui non ha funzionato per me.

+4

ad esempio, quando si ha un DDP server-server si ha ancora la simulazione del metodo ma su uno dei server. – imslavko

risposta

6

Sto prendendo il commento di Slava e lo trasformo in una risposta;) L'idea è che isSimulation possa diventare vero ovunque, sul server o sul client. È utile solo all'interno del contesto Method. La simulazione può essere utilizzata, come ha detto Slava, quando un server funge da client per un altro server.

isClient può essere utilizzato per tutti i tipi di codice, non solo all'interno di Method. Impedisce l'esecuzione del codice in un ambiente in cui potrebbe generare un errore (ad esempio l'utilizzo di Session sul server).

Per la compensazione della latenza, spesso si esegue lo stesso metodo sul client e sul server, ma se si inseriscono dati nel database, ovviamente, il client può solo simularlo. Pertanto, a volte è utile determinare se una simulazione è in esecuzione o se il database viene effettivamente modificato.

Nel tuo caso potresti voler regolare il metodo per verificare se il server ha salvato il documento per essere più robusto. Per questo vorrei aggiungere un blocco isServer nel metodo per impostare un flag synced a true e impostarlo su false ogni volta che un client cambia i dati. Idealmente accoppiato con un aggiornamento/upsert di successo.