2015-07-24 11 views
6

Ho un modello con alcuni modelli annidati in Meteor:Get reattiva var da un altro modello nella Meteor

<template name="collectingTmpl"> 
    {{> firstTmpl}} 
    {{> secondTmpl}} 
</template> 

Se ho impostato un reattivo var/dict in firstTmpl con

Template.firstTmpl.events({ 
    'click .class-name': function(event, template) { 
    template.state = new ReactiveDict; 
    template.state.set('someName', 'someValue'); 
    } 
}); 

posso ottenere questo valore all'interno dello stesso modello con

Template.firstTmpl.helpers({ 
    myValue: function() { 
    Template.instance().state.get('someName'); 
    } 
}); 

ma posso anche recuperare il valore impostato in firstTmpl da secondTmpl?

voglio dire una cosa del genere

Template.secondTmpl.helpers({ 
    myValueFromAnotherTmpl: function() { 
    Template.firstTmpl.state.get('someName'); 
    } 
}); 

risposta

3

Si potrebbe in alternativa, impostare la ReactiveDict sul modello madre che è collectingTmpl.

// always initialize your template instance properties 
// in an onCreated lifecycle event 
Template.collectingTmpl.onCreated(function(){ 
    this.firstTmplState = new ReactiveDict(); 
}); 

Poi si può ottenere riferimenti a questa proprietà di istanza modello di template figli utilizzando questo codice:

Template.firstTmpl.onCreated(function(){ 
    // warning, this line is depending on how many parent templates 
    // the current template has before reaching collectingTmpl 
    var collectingTmplInstance = this.view.parentView.templateInstance(); 
    this.firstTmplState = collectingTmplInstance.firstTmplState; 
}); 

Template.secondTmpl.onCreated(function(){ 
    var collectingTmplInstance = this.view.parentView.templateInstance(); 
    this.firstTmplState = collectingTmplInstance.firstTmplState; 
}); 

Quindi è possibile utilizzare la sintassi standard Template.instance().firstTmplState in uno dei tuoi 3 modelli e faranno sempre puntare alla stessa istanza ReactiveVar definita come proprietà di collectingTmpl.

1

Se si presta attenzione a un problema corrente di fiammata (contesto dati mancanti), è possibile accedere ad altri modelli di vars da Template.parentData().

Vedere questo MeteorPad come una demo, il colore di sfondo verrà cambiato su ogni giocatore quando si preme il pulsante. il colore è definita dal loro modello di genitore:

http://meteorpad.com/pad/zoiAvwuT3XXE5ruCf/Leaderboard_Template_parentData_Bug

Si può anche leggere a GitHub PullRequest su alcuni aggiornamenti suggerisco

https://github.com/meteor/meteor/pull/4797

Acclamazioni Tom

Problemi correlati