如何在不使用帮助程序的情况下访问Meteor模板中的全局变量?

时间:2015-04-24 05:55:08

标签: javascript meteor spacebars

我从不同的域提供了所有图像文件,并将该主机名作为变量放入Meteor.settings中。那么,如何在Meteor模板中访问此变量?

例如,在此模板中,使用Meteor.settings或其他全局变量中定义的变量替换img.example.com的最佳做法是什么?我不认为通过使用助手将其传递给每个模板是个好主意。

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

5 个答案:

答案 0 :(得分:10)

如何将数据传递到模板中的唯一方法是通过帮助程序。您可以使用global helper

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

然后,您可以在许多模板中使用全局帮助程序:

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

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

或者,如果您想从settings.json

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

你的settings.json:

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

答案 1 :(得分:0)

在你的Js文件中这样做。它可能会帮助你

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

在模板的HTML页面中,您可以迭代值{{varNameYouhavetoaccess}}

或者你可以使用助手

在JS文件中:

Template.nametag.helpers({   名字:&#34; Ben Bitdiddle&#34;   });

在HTML中:

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

答案 2 :(得分:0)

分配具有返回类型

的全局函数
if(Meteor.isClient){
 getItems = function(){
//do your stuffs
 return items;
}

您的模板

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

助手

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

您可以随时随地使用getItems()

答案 3 :(得分:0)

我知道这并非正是op所要求的,但在搜索&#34;如何从模板&#34;中访问Meteor设置时,Google上出现了此页面。

我扩展了@Tomas Hromnik的灵魂并成为了这个全局模板助手:

<强> helpers.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>

答案 4 :(得分:0)

Template.registerHelper('var', name => {
  const data = Template.instance().data || {};
  return data[name];
});

内部模板:

{{var 'someVariableFromTemplate'}}