Доступ к области экземпляра шаблона и введение данных

Я ищу способ получить доступ и ввести некоторые данные в переменную шаблона. Я хочу получить данные перед маршрутом, и они уже будут доступны при рендеринге необходимого шаблона.

Было бы полезно иметь прямой доступ к этой области. Это мой код для этого конкретного шаблона (который еще не отображен), переменная 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


person Radu Chiriac    schedule 07.02.2016    source источник


Ответы (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()
  }
});

# Редактировать 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>
person Ethaan    schedule 07.02.2016
comment
То, что я искал, - это скорее звонок и досягаемость из другой области. Я обновил свой вопрос, добавив в раздел onCreated, чтобы было понятнее - person Radu Chiriac; 08.02.2016
comment
Спасибо, мои два шаблона совершенно разные, поэтому никаких отношений между родителями и детьми. Я сейчас проголосую, так как это может решить мою проблему - person Radu Chiriac; 08.02.2016