访问Meteor中的父助手

时间:2015-06-18 18:10:09

标签: javascript meteor

我经常发现自己将自己的工作划分为仍然可以使用相同助手的模板。

所以,说我有这个模板结构:

<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。

我在这里错过了一些简单的东西吗?

3 个答案:

答案 0 :(得分:5)

您可以使用带有两个点的{{yourParentHelper ..}}等符号来访问您的父助手。 Have a look here了解更多信息(文章末尾)

你也可以在javascript中访问父数据上下文:

var parent_data = Template.parentData();

顺便说一下,您可以添加一个参数来到达第三个父级,例如:

var parent_data = Template.parentData(3);

答案 1 :(得分:5)

在当前版本的流星中没有明显的方法可以做到这一点。一种解决方案是让子模板从父级“继承”帮助程序。您可以使用meteor-template-extension轻松完成此操作。这是一个例子:

HTML

<body>
  {{> parent}}
</body>

<template name="parent">
  <h1>parent</h1>
  {{> child}}
</template>

<template name="child">
  <h2>child</h2>
  <p>{{saySomething}}</p>
</template>

JS

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}}成为一个对象,然后以这种方式传递多个数据。