【发布时间】:2014-05-08 05:19:49
【问题描述】:
如果我的数据库中有一个字段包含像“Hello {{currentUser}}”这样的字符串,有没有办法让该值在呈现到模板时保持反应性?我还想看看是否可以通过帮助程序运行它并处理字符串替换,以某种方式将我自己的变量注入到输出中。
想法?
【问题讨论】:
标签: meteor meteor-blaze
如果我的数据库中有一个字段包含像“Hello {{currentUser}}”这样的字符串,有没有办法让该值在呈现到模板时保持反应性?我还想看看是否可以通过帮助程序运行它并处理字符串替换,以某种方式将我自己的变量注入到输出中。
想法?
【问题讨论】:
标签: meteor meteor-blaze
到目前为止我提出的一个解决方案:
存储在数据库中的消息类似于:“你好,[用户],你好吗?”
然后我像往常一样使用 {{#each}} 和预定义的模板从数据库中呈现消息。
当消息实际呈现时,我通过一个助手传递它。助手将所有 [] 替换为 <span class="$1"></span>,以便我可以直接定位每个项目。
调用消息模板的 render() 后,我知道消息正文包含已清理和准备好的内容(带有跨度),因此我使用 this.$('.user').each() 并循环遍历跨度的每个实例。
我还在我的页面中创建了一个名为“placeholderUser”的特殊模板,它只包含对 {{user}} 的调用。我已将Template.placeholderUser.user = function(){} 添加到代码中以提取值并保持反应性。
哇!现在我已经建立了结构,当在“每个”中循环时,我可以调用:
UI.insert(UI.render(Template.placeholderUser), el),它将在给定的范围内渲染模板并保持所有反应性。
这是超级hacky,但它的工作原理。还有其他更好的解决方案吗?
【讨论】:
[user] 替换为适当的值来简化这一点,它应该与更短的代码一样有效地工作。