我有两个单独的模板:
<template name = "MusicControl">
<!-- Some Logics here -->
</template>
<template name = "MusicSystem">
<!-- Some Logics here ("click" event) -->
</template>
我有2个与这2个模板相关联的JavaScript文件。
我想要的是,如果在 MusicControl 模板上发生事件("click"
事件),它会设置某种全局变量(但不 { {1}}变量)以便我可以在另一个模板中作为辅助函数访问它。
如何在Meteor中的 Reactive-Dict 中实施?
不要担心我在各自的js 中为模板定义了辅助函数。
有一件事,这些Session
是彼此独立的,我只是想通过使用某种全局变量来在<templates>
上关注&lt; <template 1>
。
答案 0 :(得分:2)
@ zim答案的一个简单版本是:
HTML(实际上是Spacebars)
<template name="Parent">
{{> Child1 sharedVar1=sharedVar}}
{{> Child2 sharedVar2=sharedVar}}
</template>
<强>的JavaScript 强>
import { ReactiveVar } from 'meteor/reactive-var';
// Just initialize the variable. Could also be within the scope of a template.
var myReactiveVar = new ReactiveVar();
Template.Parent.helpers({
// This is what will be sent to Child1 and Child2.
sharedVar: function () {
return myReactiveVar;
}
});
Template.Child1.helpers({
myValue: function () {
// As usual, this will be reactive.
return Template.instance().data.sharedVar1.get();
}
});
Template.Child2.events({
'event selector': function (event, template) {
// This change will trigger an autorun of Child1 myValue helper.
template.data.sharedVar2.set(myNewValue);
}
});
(当然你可以将它们分成几个JS文件)
使用Meteor 1.6.1和Blaze的演示应用程序示例:https://github.com/ghybs/meteor-blaze-templates-share-data
答案 1 :(得分:1)
对于这种情况,我通常使用父母拥有的反应变量,其作用是在其子项之间进行协调。我不会在这里使用全局变量。
以下是基础知识。 Child1设置共享var,Child2使用它。父母拥有它。 Child1和Child2彼此没有任何关系。
<template name="Parent">
{{> Child1 sharedVarSetter=getSharedVarSetterFn}}
{{> Child2 sharedVar=sharedVar}}
</template>
JS:
Template.Parent.onCreated(function() {
this.sharedVar = new ReactiveVar();
});
Template.Parent.helpers({
sharedVar() {
return Template.instance().sharedVar.get();
},
getSharedVarSetterFn() {
let template = Template.instance();
return function(newValue) {
template.sharedVar.set(newValue);
}
}
});
Template.Child1.onCreated(function() {
this.sharedVarSetterFn = new ReactiveVar(Template.currentData().sharedVarSetter);
});
和Child1中的某个地方(帮手,事件处理程序,你有什么):
let fn = template.sharedVarSetterFn.get();
if (_.isFunction(fn)) {
fn(newValue);
}
在这里,我只展示了1个共享变量。但是如果你有多个,反应性的dict可以以相同的方式工作。