Javascript 在Meteor中访问父帮助器
我经常发现自己将自己的工作划分为仍然可以使用相同助手的模板 假设我有这个模板结构:Javascript 在Meteor中访问父帮助器,javascript,meteor,Javascript,Meteor,我经常发现自己将自己的工作划分为仍然可以使用相同助手的模板 假设我有这个模板结构: <template name="MainTemplate"> <div>{{> FirstTemplate}}</div> <div>{{> SecondTemplate}}</div> <div>{{> ThirdTemplate}}</div> <div>{{> Fourth
<template name="MainTemplate">
<div>{{> FirstTemplate}}</div>
<div>{{> SecondTemplate}}</div>
<div>{{> ThirdTemplate}}</div>
<div>{{> FourthTemplate}}</div>
</template>
遗憾的是,通过简单地键入{{dataHelper}}
就无法在模板first到fourth中访问此帮助程序,就像事件的工作方式一样
我的解决方案是创建一个全局助手,但这似乎有点过分,特别是因为我有一些页面根本不关心这些助手。另一个解决方案是创建四个单独的助手,但是,嘿,干
我这里缺少一些简单的东西吗?您可以使用带有两个点的
{{yourParentHelper..}}
等符号访问家长助手。更多信息(文章末尾)
您还可以访问javascript中的父数据上下文,如下所示:
var parent_data = Template.parentData();
顺便说一下,您可以添加一个参数以到达第三个父级,例如:
var parent_data = Template.parentData(3);
在当前版本的meteor中,没有一种明显的方法可以做到这一点。一种解决方案是让子模板从父模板“继承”助手。你可以很容易地使用。下面是一个例子: html 模板
child
继承其父级的所有帮助程序,因此它可以直接访问saySomething
这种技术有两个缺点:
- 您必须指定
关系inheritsHelpersFrom
- 父母的所有帮助者都是继承的
{{{each}}
循环中工作得最好,而我在实际的子模板中没有任何运气。一种选择是使用{{{#with}}
,尽管这基本上将您限制为一个助手。e、 g:
<template name="parent">
{{#with dataHelper}}
{{> first}}
{{> second}}
{{/with}}
</template>
{{#带dataHelper}}
{{>first}
{{>second}
{{/与}}
这会将子助手的数据上下文设置为
dataHelper
,您可以使用模板内的{{This}}
访问它们。我想您可以将dataHelper
作为一个对象,然后以这种方式传入多个数据段 您真的需要重用函数(例如,formatDate
)并使用新数据调用它,还是只需要一些共享上下文?我想用一个更具体的例子来回答这个问题会更容易。@DavidWeldon不涉及任何数据,只需访问父帮助器。这个符号会使我的整个页面暂停,不会加载任何内容。请在您的问题中发布更多详细信息。好吧,那应该行。您是否尝试构建一个类似于您想要访问并使用Template.parentData()的帮助程序代码>在父上下文中访问什么?我所做的只是尝试一下。我在一个父模板中包含了一个助手,它只是将一些内容写入控制台,然后尝试使用{{dataHelper..}}
访问它。我现在无法测试它。它可能不再起作用了。你会尝试用javascript吗?用javascript吗?这是什么意思?它会被重新初始化吗?
<body>
{{> parent}}
</body>
<template name="parent">
<h1>parent</h1>
{{> child}}
</template>
<template name="child">
<h2>child</h2>
<p>{{saySomething}}</p>
</template>
Template.parent.helpers({
saySomething: function() {
return Random.choice(['hello', 'dude!', 'i know right?']);
}
});
Template.child.inheritsHelpersFrom('parent');
<template name="parent">
{{#with dataHelper}}
{{> first}}
{{> second}}
{{/with}}
</template>