2015-04-24 14 views
6

Tüm görüntü dosyama farklı bir etki alanından sahip olduğumu ve bu ana bilgisayar adını bir değişken olarak Meteor.settings içine koydum. Ardından, bu değişkeni bir Meteor şablonu içinde nasıl kullanabilirim?Bir yardımcı kullanmadan Meteor şablonunda global değişkenlere nasıl erişilir?

Örneğin, bu şablonda, img.example.com'u Meteor.settings veya diğer bazı genel değişkenlerde tanımlanan bir değişkenle değiştirmek için en iyi uygulama nedir? Yardımcıları kullanarak her şablona iletmenin iyi bir fikir olduğunu sanmıyorum. Kişisel Js dosyasında

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

cevap

11

tek yolu yardımcıları üzerinden gerçekleştirilir. Sen global helper kullanabilirsiniz:

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

Sonra birçok şablon küresel yardımcı kullanabilirsiniz:

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

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

Yoksa settings.json gelen imgExampleUrl değerini almak istiyorsanız

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

Sizin settings.json:

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

Ve soru gibi bir yardımcı olmadan, nasıl yaparsınız? ... örneğin, global yardımcılarımı –

+0

değişkenleri ile polise uğratmak istemiyorum. Verilerinizi şablonlarınıza nasıl aktarabildiğinizin tek yolu, yardımcılar. –

0

böyle yap. Size

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

yardımcı olabilir Ve şablonda HTML sayfası size değer {{varNameYouhavetoaccess}}

yineleme yapabilirsiniz Veya JS dosyasındaki Helper

kullanabilirsiniz: (

Template.nametag.helpers { ad: "Ben Bitdiddle" }); HTML'de

: Eğer şablonlar içine veri aktarmak nasıl

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

Ama bir sargı veya yardımcı tanımlamak zorunda anlamına gelmez Bu değişken kullanacak ** her ** şablon için? Bundan kaçınmaya çalışıyorum. – zhengyue

0

bu tam değil Sen tanıdığım yerde

0

den getItems() kullanabilirsiniz dönüş türü

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

Şablon

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

Yardımcıları

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

ile küresel bir işlev atayın ne için soruyordu ama bu sayfa Googl'da çıktı "Şablondan Meteor ayarlarına nasıl erişilir" ifadesini ararken.

Ben @Tomas Hromnik en soultion genişletilmiş ve bu global şablon yardımcı yaptı:

yardımcıları.home.html

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; 
}); 

js

şablonun içinde
<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]; 
}); 

:

{{var 'someVariableFromTemplate'}} 
+0

Bu soruya cevap verse de, cevabın temel kısımlarını ve muhtemelen OP'lerin koduyla ilgili problemi açıklamak daha iyi olacaktır. – pirho

İlgili konular