2015-04-24 15 views
6

Mam wszystkie pliki obrazów obsługiwane z innej domeny, a nazwę hosta umieszczam jako zmienną w Meteor.settings. Jak uzyskać dostęp do tej zmiennej w szablonie Meteor?Jak uzyskać dostęp do zmiennych globalnych w szablonie Meteor bez pomocy pomocnika?

Na przykład w tym szablonie, jaka jest najlepsza praktyka zastępowania img.example.com zmienną zdefiniowaną w Meteor.settings lub innych zmiennych globalnych? Nie sądzę, że dobrym pomysłem jest przekazanie go do każdego szablonu przy użyciu pomocników.

<template name="products"> 
    {{#each items}} 
    <img src="http://img.example.com/{{id}}.png"> 
    {{/each}} 
</template> 

Odpowiedz

11

Jedynym sposobem, w jaki sposób można przekazać dane do szablonów jest przez pomocników. Można użyć global helper:

Template.registerHelper('imgExampleUrl', function() { 
    return 'img.example.com'; 
}); 

Następnie można użyć globalnego pomocnika w wielu szablonach:

<template name="products"> 
    {{#each items}} 
    <img src="http://{{imgExampleUrl}}/{{id}}.png"> 
    {{/each}} 
</template> 

<template name="otherTemplate"> 
    <img src="http://{{imgExampleUrl}}/{{id}}.png"> 
</template> 

Lub jeśli chcesz uzyskać wartość imgExampleUrl z settings.json

Template.registerHelper('imgExampleUrl', function() { 
    return Meteor.settings.public.imgExampleUrl; 
}); 

Twój settings.json:

{ 
    "public": { 
    "imgExampleUrl": "img.example.com" 
    } 
} 
+0

I bez pomocnika takiego jak pytanie, jak to zrobić? ... na przykład nie chcę zbijać globalnych pomocników za pomocą zmiennych –

+0

Jedynym sposobem przekazywania danych do szablonów jest pomocnik. –

0

w pliku Js zrobić w ten sposób. To może pomóc

Template.yourTemplateName.varNameYouhavetoaccess= function(){ 
    return getYourGlobalValueHere; 
    } 

I Na stronie HTML w szablonie można iteracji wartość {{varNameYouhavetoaccess}}

lub użyć Helper

W pliku JS:

Template.nametag.helpers ({ imię: "Ben Bitdiddle" });

W HTML:

<template name="nametag"> 
    <p>My name is {{name}}.</p> 
</template> 
+0

Ale nie to znaczy, że trzeba zdefiniować opakowanie lub pomocnika dla ** każdego ** szablonu, który będzie używał tej zmiennej? Tego właśnie próbuję uniknąć. – zhengyue

0

przypisać funkcję globalną z typ zwracany

if(Meteor.isClient){ 
getItems = function(){ 
//do your stuffs 
return items; 
} 

szablonie

<template name="products"> 
    {{#each items}} 
    <img src="http://{{imgExampleUrl}}/{{id}}.png"> 
    {{/each}} 
</template> 

Pomocnicy

Template.products.helpers({ 
    items : function(){ 
    return getItems(); 
    } 
}); 

Można użyć getItems() z dowolnego

0

wiem, to nie jest dokładnie o co prosił, ale ta strona pojawiła się na Googl e przy wyszukiwaniu "Jak uzyskać dostęp do ustawień meteorytów z szablonu".

I rozszerzony na soultion @Tomas Hromnik i wykonany ten szablon globalny pomocnika:

pomocników.js

Template.registerHelper('meteorSettings', function(settings) { 
    var setting = Meteor.settings.public; 
    if (settings) { 
    var eachSetting = settings.split('.'); 
    for (i = 0; i < eachSetting.length; i++) { 
     setting = setting[eachSetting[i]]; 
    } 
    } 
    return setting; 
}); 

home.html

<template name="home"> 
    <!-- 
    Basically the same as doing this: (except you can't do this) 
    {{#if Meteor.settings.public.instagram.access_token}} 
    --> 
    {{#if (meteorSettings 'instagram.access_token')}} 
    <div class="instagram"></div> 
    {{/if}} 

    <!-- 
    You can also set Meteor.settings.public to a variable to access multiple settings 
    --> 
    {{#let settings=meteorSettings}} 
    {{settings.instagram.access_token}} 
    {{/let}} 
</template> 
0
Template.registerHelper('var', name => { 
    const data = Template.instance().data || {}; 
    return data[name]; 
}); 

Wewnątrz szablonu:

{{var 'someVariableFromTemplate'}} 
+0

Chociaż może to odpowiedzieć na pytanie, lepiej wyjaśnić zasadnicze części odpowiedzi i ewentualnie jaki był problem z kodem OPs. – pirho

Powiązane problemy