基于Dan Dascalescu的回答here,我想在Meteor中实现动态模板,如下所示:
在main.html中:
<body TEXT="#000000">
<div class="container">
{{> mnuScheduler}}
{{> Template.dynamic template=currentTemplate}}
</div>
</body>
在main.js中:
Template.body.helpers({
currentTemplate: function () {
return Session.get('curTemplate');
}
});
但显然我需要启动我的Session变量&#39; curTemplate&#39;到我要显示的第一个模板,如:
Session.setDefault('curTemplate', 'tblScheduler');
...然后在其他地方动态设置它:
Session.set('curTemplate', somethingElseBasedOnContext);
我的问题是,初始(setDefault)属于哪里?应该是我的main.js,还有Template.body.helpers(我还有我的Meteor.subscribe(&#34; bla&#34;)来电?
答案 0 :(得分:2)
以下三个位置中的任何一个都可以使用:
if (Meteor.isClient) {
Session.set('curTemplate', 'tblScheduler'); // <---
console.log('Meteor.isClient');
Meteor.startup(function() {
//Session.set('curTemplate', 'tblScheduler') // <---
console.log('Meteor.startup');
});
Template.body.onCreated(function() {
//Session.set('curTemplate', 'tblScheduler') // <---
console.log('Template.body.onCreated');
});
Template.body.helpers({
currentTemplate: function() {
return Session.get('curTemplate');
},
});
}
使用此代码,浏览器日志显示在启动时调用这些代码的顺序:
Meteor.isClient
Template.body.onCreated
Meteor.startup
Meteor.startup在DOM准备好之后才会运行,但在这种情况下这不是一个因素。
Meteor在如何构建您的应用程序方面非常灵活,因此最好在您的方法中保持一致。
在这里你可以决定启动代码进入Meteor.startup块,或者你可以决定渲染正文模板所需的,Template.body.onCreated是它的正确位置。但要尽量保持一致!