访问其他模板'实例

时间:2015-07-16 21:25:48

标签: meteor

您可以通过执行Template.instance()来访问当前模板的实例。但是,您经常遇到必须访问其他模板的情况。实例也是如此。例如,如果您使用ReactiveVar,那么您可能希望获取或设置附加到其他模板实例的变量。

我遇到了How to get the parent template instance (of the current template),但这还不完整。

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

Q2。如果我需要访问其他模板,它是否违反Meteor方式?实例吗

4 个答案:

答案 0 :(得分:1)

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

Template.example.myVariable = new ReactiveVar();

而不是

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

答案 1 :(得分:0)

如果目标模板位于同一文件中,则只需在文件开头的模板函数外定义反应变量即可。文件中的所有模板都将访问它。

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

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

我不知道任何其他方式来到达另一个模板实例(afaik,没有Blaze.getTemplate(name)函数。)你所指的答案似乎越好。

答案 2 :(得分:0)

我认为这纯粹是主观的,因为在Meteor中有很多不同的做事方式,但我认为Session非常适合在多个模板之间共享变量。人们认为Session很糟糕,因为它是全局的并且可能污染命名空间。我认为,开发人员应以任何适合他们的方式保持环境清洁。所以,例如,这很糟糕:

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

但这更好:

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

答案 3 :(得分:0)

我最接近的是通过模板的元素之一来定位模板(假设模板包含表单)

Blaze.getView($('form')[0]).templateInstance().someReactiveVar.set('changed')