domanda simile qui:
Difference between Template.instance() and this
La cosa da capire è che:
Nelle funzioni del ciclo di vita di modello (onCreated, onRendered ...) this
è pari a Template.instance()
così this.data
è lo stesso di Template.instance().data
A QUEL MOMENTO!
In un helper o evento, this
è il contesto dati corrente.
Quindi, notare una cosa importante: contesto dati possono cambiare nel tempo se le modifiche dei dati a monte:
Se si passa dati a un modello, il modello sarà nuovamente reso con i nuovi dati . Nuovi dati = nuovo contesto dati.
Quindi, se si fa qualcosa di simile:
Template.example.onCreated(function() {
this.data.myKey = "my example data set on template creation"; //WRONG!
// or equivalently:
Template.instance().data.myOtherKey = "another key"; //WRONG!
})
bene, questi dati possono essere sotto this
(vale a dire il contesto dati) nel vostro aiutante (this.myKey
), ma solo fino a quando i dati upstream non cambia.
Non appena i dati a monte cambiano, this
sarà il nuovo contesto di dati e NON conterrà i dati aggiunti.
Così, in sintesi:
Se avete bisogno di aggiungere contesto al modello in onCreated
o onRendered
, assicuratevi di NON associarlo al contesto dei dati attuali, ma per il modello.esempio()
si dovrebbe fare:
Template.example.onCreated(function() {
this.myKey = "my example data set on template creation";
// or equivalently:
Template.instance().myOtherKey = "another key";
})
e si può accedere a questi dati in aiuto e gli eventi tramite
Template.instance().myKey
'Template.instance' è (al momento) utile solo in aiutanti. In altri posti (come il callback 'created', il callback' rendered', ecc.) Si può ottenere l'istanza del template in altri modi, ma in questi casi si può anche usare 'Template.instance' se si preferisce. –
nota come ho scritto nella mia risposta di seguito che mentre è possibile accedere ai dati Template.instance(). In questo modo, NON si devono mettere i propri dati in questo contesto, o rischia di scomparire nel prossimo rendering Template. – MrE