2015-07-16 3 views
1

Вы можете получить доступ к экземпляру текущего шаблона, выполнив Template.instance(). Но вы часто сталкиваетесь с ситуациями, когда вам приходится обращаться к другим экземплярам шаблонов. Например, если вы используете ReactiveVar, тогда вам нужно будет получить или установить переменные, которые привязаны к другим экземплярам шаблонов.Доступ к экземплярам других шаблонов

Я столкнулся с How to get the parent template instance (of the current template), но это еще не все.

Q1. Как мы можем получить доступ к экземпляру любого шаблона, а не только к текущему шаблону

Q2. Это против метода Метеор, если мне нужно получить доступ к экземплярам других шаблонов?

+0

Как этого письма, пламя не имеет встроенного в библиотеке компонентов, так что вы застряли делать такие вещи, как [Blaze.getData] (https: // документы .meteor.com/#/полный/blaze_getdata). Если у вас есть конкретный пример, я могу привести более конкретный пример с кодом. –

ответ

0

Если целевые шаблоны находятся в одном файле, вы можете просто определить реактивную переменную вне функций шаблона в начале файла. Все шаблоны в файле будут иметь к нему доступ.

Если целевой шаблон родительского шаблона, (или любой дальнейший родительский шаблон), вы можете получить доступ к его контекстуданных, используя Template.parentData() аргумент, являющееся звание родителя (по умолчанию 1). Кажется, вы уже это знаете.

Если вам нужно получить доступ к элементу DOM в другом шаблоне на той же странице, вы можете использовать селектора jQuery.

Я не знаю другого способа связаться с другим экземпляром шаблона (afaik, нет функции Blaze.getTemplate(name).) Ответ, на который вы ссылаетесь, кажется, тем лучше, что вы можете получить.

0

Я думаю, что это чисто субъективно, так как в Метеор существует так много разных способов делать что-то, но я на самом деле думаю, что Session отлично подходит для обмена переменными по нескольким шаблонам. Люди утверждают, что Session плох, так как он глобальный и может загрязнять пространство имен. Я бы сказал, что разработчик должен поддерживать чистоту своей среды, которая работает для них. Так, например, это плохо:

Session.set('count', 23); 
Session.set('last', new Date()); 

Но это лучше:

Session.set('notifications/count', 23); 
Session.set('notificatinos/last', new Date()); 
1

вы можете попытаться установить переменный шаблон непосредственно на уровне шаблона вместо внутри экземпляра.

Template.example.myVariable = new ReactiveVar(); 

вместо

Template.example.onCreated(function(){ 
    this.myVariable = new ReactiveVar(); 
}); 
Смежные вопросы