Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Meteor中访问父帮助器_Javascript_Meteor - Fatal编程技术网

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>