2016-02-15 4 views
0

У меня есть два шаблона, и я определил JavaScript-помощники и события для каждого. При нажатии кнопки в шаблоне A одна из вещей, которую я хочу сделать, - это вызвать вспомогательную функцию для шаблона B, которая изменит то, что отображается на экране. Это возможно?Метеор: Помощник шаблона вызова из другого шаблона

Если это не возможно, я бы вместо этого хотел, чтобы перезагрузить шаблон B.

Как я могу сделать что-либо из них? Использовать Tracker.autorun? Реактивные переменные? В идеале я хотел бы сделать, внутри функции события для шаблона A,

B.helpers.call("helperFunctionFromTemplateB"); 

ответ

2

Есть много решений, что я думаю, что вы хотите достичь, но ответ действительно зависит от контекста.

  1. Если Шаблон А шаблон ребенок B:
    1. Вы можете передать ссылку на ReactiveVar в родительском шаблоне до контекста данных шаблона дочернего и изменять его с помощью {{>childTemplate reactiveVar=reactiveVar}} где reactiveVar является вспомогательным в родительском шаблоне, который возвращает ссылку на реактивную переменную
    2. Если предмет, который вы хотите изменить, находится в контексте данных родителя, вы можете использовать Template.parentData(n), где n - это количество уровней, которые вы хотите вскочить. В то время как изменение данных родителя не может сразу показаться реактивным, вы можете сделать data проп реактивным путем доступа к нему через Template.currentData()
  2. использовать какое-то глобально доступное состояние. Наиболее распространенным ответом, вероятно, будет использование пакета Session и использование Session.get('var') и Session.set('var', val).
  3. Используйте event emitter. Этот подход получает + 's для развязки и повторного использования, но это также потенциально тяжело, если вам нужно только изменить эту переменную в одном месте из одного источника (т. Е. Ваши требования просты)
  4. Meteor 1.3 - Если вы хотите ссылайтесь на свои реактивные данные в нескольких местах, но не хотите создавать глобальные, такие как Session, используйте ReactiveVar или Reactive Dict (ближе к сеансу), создайте свою переменную там, где это имеет смысл, export и import в ваших шаблонах/где-нибудь еще.

Существует много других решений, это только первые, которые приходят на ум. Если вы предоставите более конкретный контекст, я приведу пример кода, который, на мой взгляд, лучше всего, и объясните, почему. :)

Смежные вопросы