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 模板状态与全局会话的主要内容,如果未能解决你的问题,请参考以下文章