如何在不使用助手的情况下访问 Meteor 模板中的全局变量?
How to access global variables in Meteor template without using a helper?
我的所有图像文件都来自不同的域,我将该主机名作为变量放入 Meteor.settings。那么,如何在 Meteor 模板中访问这个变量?
例如,在此模板中,将 img.example.com
替换为 Meteor.settings 中定义的变量或其他一些全局变量的最佳做法是什么?我不认为使用助手将它传递给每个模板是个好主意。
<template name="products">
{{#each items}}
<img src="http://img.example.com/{{id}}.png">
{{/each}}
</template>
在你的 Js 文件中这样做。它可能对你有帮助
Template.yourTemplateName.varNameYouhavetoaccess= function(){
return getYourGlobalValueHere;
}
并且在模板的 HTML 页面中,您可以迭代值 {{varNameYouhavetoaccess}}
或者您可以使用助手
在 JS 文件中:
Template.nametag.helpers({
姓名:"Ben Bitdiddle"
});
在HTML中:
<template name="nametag">
<p>My name is {{name}}.</p>
</template>
将数据传递到模板的唯一方法是通过助手。您可以使用 global helper:
Template.registerHelper('imgExampleUrl', function() {
return 'img.example.com';
});
那么你就可以在很多模板中使用global helper:
<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"
}
}
分配 return 类型的全局函数
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()
我知道这不是 op 所要求的,但在搜索 "How to access Meteor settings from template" 时,此页面出现在 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>
Template.registerHelper('var', name => {
const data = Template.instance().data || {};
return data[name];
});
内部模板:
{{var 'someVariableFromTemplate'}}
我的所有图像文件都来自不同的域,我将该主机名作为变量放入 Meteor.settings。那么,如何在 Meteor 模板中访问这个变量?
例如,在此模板中,将 img.example.com
替换为 Meteor.settings 中定义的变量或其他一些全局变量的最佳做法是什么?我不认为使用助手将它传递给每个模板是个好主意。
<template name="products">
{{#each items}}
<img src="http://img.example.com/{{id}}.png">
{{/each}}
</template>
在你的 Js 文件中这样做。它可能对你有帮助
Template.yourTemplateName.varNameYouhavetoaccess= function(){
return getYourGlobalValueHere;
}
并且在模板的 HTML 页面中,您可以迭代值 {{varNameYouhavetoaccess}}
或者您可以使用助手
在 JS 文件中:
Template.nametag.helpers({ 姓名:"Ben Bitdiddle" });
在HTML中:
<template name="nametag">
<p>My name is {{name}}.</p>
</template>
将数据传递到模板的唯一方法是通过助手。您可以使用 global helper:
Template.registerHelper('imgExampleUrl', function() {
return 'img.example.com';
});
那么你就可以在很多模板中使用global helper:
<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"
}
}
分配 return 类型的全局函数
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()
我知道这不是 op 所要求的,但在搜索 "How to access Meteor settings from template" 时,此页面出现在 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>
Template.registerHelper('var', name => {
const data = Template.instance().data || {};
return data[name];
});
内部模板:
{{var 'someVariableFromTemplate'}}