繁体   English   中英

动态流星渲染模板

[英]Meteor Rendering Template Dynamically

我有一个由多个页面和一个主页组成的webapp。 在Meteor中开发此webapp时,我将页面分为模板。 Web应用程序将在一段时间内显示不同的页面,这意味着页面A的显示时间为60秒,然后继续页面B的显示时间为75秒,依此类推。

在流星中,我构造了一个包含页眉和页脚以及可更改模板持有人的主页。 所以基本上主页看起来像这样:

<template name='main'>
   {{>header}}
   {{>templateHolder}}
   {{>footer}}
</template>

然后将Pages转换为模板,即templateA等。这些模板应基于Session对象的更新来替代templateHolder ,该更新还基于将使用setTimeout JS函数执行的某些计时(以秒为单位)。

一切正常,但是我注意到每个Page的时机都一团糟。 当我分别测试template ,它们可以正常工作。 我怀疑setTimeout的异步调用以某种方式相互冲突。

这是定期更改模板的JS代码。

Template.main.templateHolder = function(){
  var appIndex = Session.get('currentAppIndex');
  switch(appIndex){
     case 'A':
        return Template['templateA'];
  } //....and so on... with other templates
}

Template.main.created = function() {
  //Query each pages display time and load it into sessions
  // etc...........

  Session.set('currentAppIndex',0); //Initialize the first page
  setTimeout(nextPage,0);
}

function nextPage() {
  //Bunch of line of codes that retrieve time param from settings and calculate
  //Also some simple alogrithm to get next templates.. etc
  //Update the session index object so that it reactively updates the templateHolder

  setTimeout(nextPage,currPageDisplayTime); //currPageDisplayTime is the pages time of display in milliseconds.
}

我不确定我的方法是否正确,但是它设法显示了模板并进行了更改。 唯一需要担心的是计时不正确。 动态更改模板的最佳方法是什么? 将来是否容易出现任何错误?

我发现了这种错误行为的原因。 如何解决它们?

  1. 每当模板中发生超时时,我都会发出JS alert
  2. 另外,每当会话对象更新时发出alert

模板渲染的流程应类似于此template A (60 secs) --> template B (75secs)--> template A (循环)。 我注意到在显示template B ,触发了我放入template Aalert 这意味着,尽管一次只显示一个模板,但是创建的模板仍在后台健康地生活。 无论指定执行什么操作,它都将继续执行该过程。

这使我意识到,如果两个模板都同时存在,那么我将无法使用相同的会话对象,因为它们都将更新相同的内容。 原来,我对跨模板使用会话对象进行了标准化。 例如,我使用Session.set('itemIndex',index)遍历每个模板中的集合,但是由于这些模板意外地使用了同一对象,因此它们都同时更新了数据。

因此,JS setTimeout可以按预期工作。 问题是共享的会话对象。

TL; DR模板在不显示/更改时不会被破坏。 可以通过手动销毁它或使用其他对象来避免这种情况。

P / S:仍在研究创建后如何销毁模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM