您可以通过执行Template.instance()
来访问当前模板的实例。但是,您经常遇到必须访问其他模板的情况。实例也是如此。例如,如果您使用ReactiveVar
,那么您可能希望获取或设置附加到其他模板实例的变量。
我遇到了How to get the parent template instance (of the current template),但这还不完整。
Q1。我们如何访问任何模板的实例,而不仅仅是当前模板
Q2。如果我需要访问其他模板,它是否违反Meteor方式?实例吗
答案 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')