2013-02-28 10 views
16

Dire che abbiamo un modello di genitore e un modello di bambino:I modelli figlio Meteor possono accedere agli helper dei modelli principali?

<template name="parent"> 
    {{> child }} 
</template> 

<template name="child"> 
    {{#if show}} 
    //Do something 
    {{/if}} 
</template> 

Se assegniamo 'show' al modello di genitore:

if (Meteor.isClient){ 
    Template.parent.show = function(){ 
    return Session.get('isShowing'); 
    } 
} 

Esiste un modo per il modello bambino di avere accesso a vero?

+0

Direi che questo è più di un manubrio questione –

+0

I manubri supportano '../ ', ma non sono sicuro di quanto arretrato sarà – Swadq

risposta

8

Modifica

Si potrebbe fare un manubrio universale aiutante così si potrebbe utilizzare valori Sessions ovunque nel tuo html:

client js

Handlebars.registerHelper('session', function(key) { 
    return Session.get(key); 
}); 

HTML client

<template name="child"> 
    {{#if session "show"}} 
    //Do something 
    {{/if}} 
</template> 

Analogamente, è possibile utilizzare anche {{session "show"}}/{{#if session "show"}} nel modello principale e non utilizzare più l'helper Template.parent.show.

Riguardo all'uso della notazione ../. Alcuni scenari potrebbero non funzionare: https://github.com/meteor/meteor/issues/563. Fondamentalmente funziona all'interno di {{#blocks helper}} ma non con i template, ma funzionerebbe in un block helper se contiene un subtemplate.

<template name="child"> 
    {{#if ../show}} 
     Do something 
    {{/if}} 
</template> 
+1

Lo sto vedendo nella documentazione del manubrio, ma sei in grado di riprodurlo su Meteor? Quando provo, sto ricevendo un errore nella console: "Errore Uncaught: troppi" .. "segmenti". Per quanto ho capito ../ fa riferimento al contesto genitore dei dati con cui stiamo lavorando quindi se avessimo: context = {name: John, posts: {post1: body1, post2: body2}} e stavamo scorrendo sul post proprietà che potremmo usare ../ per accedere alla proprietà name. Ma non penso che possiamo usare ../ per accedere a oggetti di dati completamente nuovi che non stiamo già accedendo, o almeno non riesco a farlo funzionare. – J2K

+0

Sì, hai ragione, sembra che la notazione '../' non funzioni necessariamente sempre con i subtemplate. Ho aggiornato la risposta con un'altra soluzione – Akshat

+0

Grazie per la risposta. Non esattamente quello che speravo (la ../show sarebbe perfetta se funzionasse) ma penso che questo sia un lavoro utile e abbastanza pulito. – J2K

2

È possibile anche registrare un aiutante comune:

Template.registerHelper('isTrue', function(boolean) { 
    return boolean == "true"; 
}); 

e chiamarlo proprio come quella nel tuo html:

<input type="checkbox" checked="{{isTrue attr}}"/> 
Problemi correlati