我经常发现自己将我的工作划分为仍然可以使用相同助手的模板.
所以,说我有这个模板结构:
<template name="MainTemplate">
<div>{{> FirstTemplate}}</div>
<div>{{> SecondTemplate}}</div>
<div>{{> ThirdTemplate}}</div>
<div>{{> FourthTemplate}}</div>
</template>
Run Code Online (Sandbox Code Playgroud)
现在每个模板都想使用相同的帮助器,让我们称之为dataHelper:
Template.MainTemplate.helpers({
dataHelper: function() {
//do some stuff
return result
}
})
Run Code Online (Sandbox Code Playgroud)
遗憾的是,只需键入{{dataHelper}}事件的工作方式,就无法在第一到第四个模板中访问此帮助程序.
我的解决方案是创建一个全局帮助器,但这似乎有点过分,特别是因为我有几个页面根本不关心这些帮助器.另一种解决方案是创建四个独立的助手,但是,嘿,DRY.
我错过了一些简单的东西吗?
您可以使用{{yourParentHelper ..}}两个点之类的表示法访问您的父助手.在这里查看更多信息(文章末尾)
您还可以在javascript中访问父数据上下文:
var parent_data = Template.parentData();
Run Code Online (Sandbox Code Playgroud)
顺便说一下,您可以添加一个参数来到达第三个父级,例如:
var parent_data = Template.parentData(3);
Run Code Online (Sandbox Code Playgroud)
在当前版本的流星中没有明显的方法可以做到这一点.一种解决方案是让子模板从父级"继承"帮助程序.您可以使用meteor-template-extension轻松完成此操作.这是一个例子:
<body>
{{> parent}}
</body>
<template name="parent">
<h1>parent</h1>
{{> child}}
</template>
<template name="child">
<h2>child</h2>
<p>{{saySomething}}</p>
</template>
Run Code Online (Sandbox Code Playgroud)
Template.parent.helpers({
saySomething: function() {
return Random.choice(['hello', 'dude!', 'i know right?']);
}
});
Template.child.inheritsHelpersFrom('parent');
Run Code Online (Sandbox Code Playgroud)
模板child继承了其所有父级的帮助程序,因此可以直接访问saySomething.
这种技术有两个缺点:
inheritsHelpersFrom关系| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |