Meteor 访问其他模板';实例

Meteor 访问其他模板';实例,meteor,Meteor,通过执行template.instance(),可以访问当前模板的实例。但您经常会遇到这样的情况,即您还必须访问其他模板的实例。例如,如果使用ReactiveVar,则需要获取或设置附加到其他模板实例的变量 我遇到过,但这还不完整 Q1。我们如何访问任何模板的实例,而不仅仅是当前模板的实例 Q2。如果我需要访问其他模板的实例,这是否与Meteor方法相反?如果您的目标模板位于同一个文件中,您可以在文件开头的模板函数之外定义被动变量。文件中的所有模板都将访问它 如果目标模板是父模板(或任何其他父模

通过执行
template.instance()
,可以访问当前模板的实例。但您经常会遇到这样的情况,即您还必须访问其他模板的实例。例如,如果使用
ReactiveVar
,则需要获取或设置附加到其他模板实例的变量

我遇到过,但这还不完整

Q1。我们如何访问任何模板的实例,而不仅仅是当前模板的实例


Q2。如果我需要访问其他模板的实例,这是否与Meteor方法相反?

如果您的目标模板位于同一个文件中,您可以在文件开头的模板函数之外定义被动变量。文件中的所有模板都将访问它

如果目标模板是父模板(或任何其他父模板),则可以使用
template.parentData()
作为父模板秩的参数(默认值为1)访问其数据上下文。看来你已经知道了

如果需要访问同一页面中不同模板中的DOM元素,可以使用jQuery选择器


我不知道还有什么其他方法可以到达另一个模板实例(当然,这里没有Blaze.getTemplate(name)函数。)你所指的答案似乎是你能得到的最好的答案。

我认为这纯粹是主观的,因为在Meteor中有很多不同的方法,但我实际上认为
会话
非常适合跨多个模板共享变量。人们认为,
Session
是不好的,因为它是全局的,会污染名称空间。我认为,开发人员应该以任何适合他们的方式保持环境清洁。例如,这是不好的:

Session.set('count', 23);
Session.set('last', new Date());
但这更好:

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

您可以尝试直接在模板级别而不是在实例内部设置模板变量

Template.example.myVariable = new ReactiveVar();
而不是

Template.example.onCreated(function (){
  this.myVariable = new ReactiveVar();
});

我得到的最接近的目标是通过模板的一个元素(假设模板包含表单)


在撰写本文时,blaze没有内置的组件库,因此您只能做类似的事情。如果你有一个具体的例子,我可以用代码给出一个更具体的例子。
Blaze.getView($('form')[0]).templateInstance().someReactiveVar.set('changed')