Meteor 模板状态与全局会话

Posted

技术标签:

【中文标题】Meteor 模板状态与全局会话【英文标题】:Meteor template state vs. global session 【发布时间】:2012-11-25 10:59:12 【问题描述】:

我刚刚开始使用来自 Apache-Wicket 可重用组件的 webapp 开发的流星。

据了解,如果模板中使用的数据不是 mongodb 文档,则必须使用会话来存储状态信息,例如下拉选择。但是会话是全局的,如果一个模板被使用两次或多次,那么固定的会话属性“mySelection”将不起作用,因为所有模板实例都将共享/覆盖相同的会话值。 Apache Wicket 解决方案是使用完全限定的模板路径为属性添加前缀,并为每个模板实例维护一个唯一的会话属性。

是否有一个通用的内置解决方案来维护流星中的“模板实例状态”? 如果没有,也许模板实例本身可以通过模板函数以某种方式访问​​?

【问题讨论】:

【参考方案1】:

模板实例本身可以通过this访问。

见Templates Instances。

【讨论】:

但仅限于创建、渲染、销毁。有没有办法在其他模板函数中访问它? Template.abc.data = function() return this.mydata.【参考方案2】:

我这样做的方式类似于您描述为 Apache Wicket 的解决方案,除了我会编写自己的代码来管理它。因此,例如,使用与每个模板匹配的键来管理 Session 对象:

function setTemplateSession(key, value) 
  Session.set("template_" + key, value);

function getTemplateSession(key) 
  Session.get("template_" + key);

在您的模板方法中:

Template.myList.selection = function() 
  return getTemplateSession("myList");


Template.myOtherList.selection = function() 
  return getTemplateSession("myOtherList");

你显然可以进一步抽象这个。虽然如果 Meteor 默认提供这种行为会很好,但也许您可以编写一个智能包,将 Apache Wicket 的哲学贡献给 Meteor 的模板系统,而​​不是让 Meteor 做到这一点?

【讨论】:

以上是关于Meteor 模板状态与全局会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Meteor 中将全局模板助手放在一起?

如何在不使用帮助器的情况下访问 Meteor 模板中的全局变量?

如何处理 Meteor 模板中的 switch case

Meteor App & iOS 状态栏

Drools:无状态与有状态知识会话

Meteor WebSocket 已处于 CLOSING 或 CLOSED 状态错误