访问模板的实例范围并注入数据

时间:2016-02-07 19:37:57

标签: javascript meteor meteor-blaze

我正在寻找一种方法来访问并将一些数据注入模板的变量中。我想在路由之前获取数据,并在需要的模板渲染时使其可用。

直接访问该范围将非常有用。这是我特定模板的代码(尚未渲染),变量为 allFriends

Template.FacebookLook.onRendered(function () {
  const instance = Template.instance();

  if(!!Friends.find().fetch()) {
    instance.allFriends = Friends.find().fetch();
  } else {
    Popup.show("Invite your friends", null);
  }

});

我在论坛上找到了一些讨论,我得到了:

Template.InitView.onCreated(function () {
  Blaze.getView('FacebookLook').allFriends.set([]);
});

但我得到Uncaught Error: There is no current view

1 个答案:

答案 0 :(得分:1)

是否要在FacebookLook视图中插入数据?不需要Blaze.getView().

您可以使用ReactiveVar对此进行归档。

Template.FacebookLook.onRendered(function () {
  var tmpl = this;

  if(!!Friends.find().fetch()) {
    instance.allFriends = Friends.find().fetch();
  } else {
    Popup.show("Invite your friends", null);
  }
  tmpl.allFriends.set([]);
});

Template.FacebookLook.onRendered(function () {
  var tmpl = this;
  tmpl.allFriends = new ReactiveVar;
});

然后使用此功能,您可以访问助手或

等事件中的数据
Template.FacebookLook.helpers({
  test:function(){
   return Template.instance().allFriends.get()
  }
});

#Edit 1

根据您的问题,您需要做的就是这个。

Template.InitView.onCreated(function () {
  var facebookTmpl = Blaze.getView('FacebookLook') && Blaze.getView('FacebookLook').templateInstance();
  facebookTmpl.allFriends.set([]);
});

请注意,您需要知道只有InitView视图是FacebookLook视图中的包装器时才会有效,我正在谈论这个。

<template name="FacebookLookTemplate">
   {{> InitView}} {{! here initView can access the parent or wrapping template}}
</template>