Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不使用助手的情况下访问Meteor模板中的全局变量?_Javascript_Meteor_Spacebars - Fatal编程技术网

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

Javascript 如何在不使用助手的情况下访问Meteor模板中的全局变量?,javascript,meteor,spacebars,Javascript,Meteor,Spacebars,我的所有图像文件都来自不同的域,我将主机名作为变量放入Meteor.settings中。那么,如何在Meteor模板中访问此变量 例如,在此模板中,用Meteor.settings中定义的变量或其他一些全局变量替换img.example.com的最佳实践是什么?我认为使用助手将其传递给每个模板不是一个好主意 {{{#每项} {{/每个}} 在Js文件中,这样做。这可能对你有帮助 Template.yourTemplateName.varNameYouhavetoaccess= function

我的所有图像文件都来自不同的域,我将主机名作为变量放入Meteor.settings中。那么,如何在Meteor模板中访问此变量

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


{{{#每项}
{{/每个}}

在Js文件中,这样做。这可能对你有帮助

Template.yourTemplateName.varNameYouhavetoaccess= function(){
    return getYourGlobalValueHere;
  }
在模板的HTML页面中,您可以迭代value
{{{varNameYouhavetoaccess}}

或者您可以使用Helper

在JS文件中:

Template.nametag.helpers({ 名字:“本·比特欺骗” });

在HTML中:

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

我的名字是{{name}


将数据传递到模板中的唯一方法是通过助手。您可以使用:

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

<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:

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

分配一个返回类型为的全局函数

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

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

你可以在任何地方使用
getItems()

我知道这并不完全是op想要的,但在Google上搜索“如何从模板访问Meteor设置”时,出现了这个页面

我在@Tomas Hromonik的soultion上进行了扩展,并制作了这个全局模板助手:

helpers.js

Template.registerHelper('meteorSettings',函数(设置){
var设置=Meteor.settings.public;
如果(设置){
var eachSetting=settings.split('.');
对于(i=0;i
home.html


{{{#如果(设置'instagram.access_token')}
{{/if}
{{{#let settings=meteorSettings}}
{{settings.instagram.access_token}
{{/let}
内部模板:

{{var 'someVariableFromTemplate'}}

但是,这不意味着我必须为每个将使用此变量的模板定义一个包装器或帮助器吗?这就是我试图避免的。如果没有像问题所问的那样的助手,你怎么做。。。例如,我不想让我的全局助手使用变量。您将数据传递到模板中的唯一方法是通过助手。虽然这可能会回答问题,但最好解释答案的基本部分,以及OPs代码可能存在的问题。
<template name="products">
    {{#each items}}
    <img src="http://{{imgExampleUrl}}/{{id}}.png">
  {{/each}}
</template>
Template.products.helpers({
  items : function(){
    return getItems();
  }
});
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;
});
<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>
Template.registerHelper('var', name => {
  const data = Template.instance().data || {};
  return data[name];
});
{{var 'someVariableFromTemplate'}}