我经常发现自己将自己的工作划分为仍然可以使用相同助手的模板。
所以,说我有这个模板结构:
<template name="MainTemplate">
<div>{{> FirstTemplate}}</div>
<div>{{> SecondTemplate}}</div>
<div>{{> ThirdTemplate}}</div>
<div>{{> FourthTemplate}}</div>
</template>
现在每个模板都想使用相同的帮助器,让我们称之为dataHelper
:
Template.MainTemplate.helpers({
dataHelper: function() {
//do some stuff
return result
}
})
可悲的是,只需键入{{dataHelper}}
,就像事件的工作方式一样,无法在第一到第四个模板中访问此帮助程序。
我的解决方案是创建一个全球帮手,但这似乎有点过分,特别是因为我有几页根本不关心这些助手。另一种解决方案是创建四个独立的助手,但是,嘿,DRY。
我在这里错过了一些简单的东西吗?
答案 0 :(得分:5)
您可以使用带有两个点的{{yourParentHelper ..}}
等符号来访问您的父助手。 Have a look here了解更多信息(文章末尾)
你也可以在javascript中访问父数据上下文:
var parent_data = Template.parentData();
顺便说一下,您可以添加一个参数来到达第三个父级,例如:
var parent_data = Template.parentData(3);
答案 1 :(得分:5)
在当前版本的流星中没有明显的方法可以做到这一点。一种解决方案是让子模板从父级“继承”帮助程序。您可以使用meteor-template-extension轻松完成此操作。这是一个例子:
<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');
模板child
会继承其所有父级帮助程序,因此可以直接访问saySomething
。
这种技术有两个缺点:
inheritsHelpersFrom
关系答案 2 :(得分:2)
双点表示法似乎在RI_DiariodeFotos.Where(a=> a.Idproyecto == PROJECTID && a.Fechadiario ==
RI_DiariodeFotos
.Where(x=> x.Idproyecto == PROJECTID)
.OrderByDescending(x=> x.Fechadiario)
.Select(x=> x.Fechadiario)
.FirstOrDefault())
.Select(w=> w.Archivo).ToList().First()
循环中效果最好,而且我在实际的子模板中没有任何运气。一种选择是使用{{#each}}
,尽管这限制了你基本上一个帮手。 e.g:
{{#with}}
这会将子帮助程序的数据上下文设置为<template name="parent">
{{#with dataHelper}}
{{> first}}
{{> second}}
{{/with}}
</template>
,您可以在模板中使用dataHelper
访问它们。我想你可以让{{this}}
成为一个对象,然后以这种方式传递多个数据。