如何在不使用帮助器的情况下访问 Meteor 模板中的全局变量?
Posted
技术标签:
【中文标题】如何在不使用帮助器的情况下访问 Meteor 模板中的全局变量?【英文标题】:How to access global variables in Meteor template without using a helper? 【发布时间】:2015-07-02 14:25:58 【问题描述】:我的所有图像文件都来自不同的域,我将该主机名作为变量放入 Meteor.settings。那么,如何在 Meteor 模板中访问这个变量呢?
例如,在这个模板中,用 Meteor.settings 中定义的变量或其他一些全局变量替换 img.example.com
的最佳做法是什么?我认为使用帮助器将其传递给每个模板并不是一个好主意。
<template name="products">
#each items
<img src="http://img.example.com/id.png">
/each
</template>
【问题讨论】:
【参考方案1】:Template.registerHelper('var', name =>
const data = Template.instance().data || ;
return data[name];
);
内模板:
var 'someVariableFromTemplate'
【讨论】:
虽然这可能会回答这个问题,但最好解释一下答案的基本部分,以及 OP 代码可能存在什么问题。【参考方案2】:我知道这不是 op 所要求的,但是当搜索“如何从模板访问 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>
【讨论】:
【参考方案3】:为全局函数分配返回类型
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()
【讨论】:
【参考方案4】:将数据传递到模板的唯一方法是通过帮助程序。你可以使用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"
【讨论】:
如果没有像问题所问的那样的助手,你是怎么做的? ...例如,我不想用变量污染我的全局助手 将数据传递到模板的唯一方法是通过帮助程序。【参考方案5】:在你的 Js 文件中这样做。可能对你有帮助
Template.yourTemplateName.varNameYouhavetoaccess= function()
return getYourGlobalValueHere;
并且在模板中的 html 页面中,您可以迭代值 varNameYouhavetoaccess
或者你可以使用Helper
在JS文件中:
模板.nametag.helpers( 名称:“本·比特德尔” );
在 HTML 中:
<template name="nametag">
<p>My name is name.</p>
</template>
【讨论】:
但是,这是否意味着我必须为将使用此变量的 每个 模板定义一个包装器或帮助器?这就是我要避免的。以上是关于如何在不使用帮助器的情况下访问 Meteor 模板中的全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
C# - 如何在不使用索引器的情况下获取自定义集合的第一项?
Ruby Rspec:在不向源添加访问器的情况下测试实例变量
在不使用模板或框架的情况下使用 Phonegap 设置 Vue.js
谷歌文档如何在不使用 Flash 查看器的情况下显示我的 .PPT 文件?