【问题标题】:Render a meteor reactive variable from a database field从数据库字段渲染流星反应变量
【发布时间】:2014-05-08 05:19:49
【问题描述】:

如果我的数据库中有一个字段包含像“Hello {{currentUser}}”这样的字符串,有没有办法让该值在呈现到模板时保持反应性?我还想看看是否可以通过帮助程序运行它并处理字符串替换,以某种方式将我自己的变量注入到输出中。

想法?

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

    到目前为止我提出的一个解决方案:

    存储在数据库中的消息类似于:“你好,[用户],你好吗?”

    然后我像往常一样使用 {{#each}} 和预定义的模板从数据库中呈现消息。

    当消息实际呈现时,我通过一个助手传递它。助手将所有 [] 替换为 <span class="$1"></span>,以便我可以直接定位每个项目。

    调用消息模板的 render() 后,我知道消息正文包含已清理和准备好的内容(带有跨度),因此我使用 this.$('.user').each() 并循环遍历跨度的每个实例。

    我还在我的页面中创建了一个名为“placeholderUser”的特殊模板,它只包含对 {{user}} 的调用。我已将Template.placeholderUser.user = function(){} 添加到代码中以提取值并保持反应性。

    哇!现在我已经建立了结构,当在“每个”中循环时,我可以调用: UI.insert(UI.render(Template.placeholderUser), el),它将在给定的范围内渲染模板并保持所有反应性。

    这是超级hacky,但它的工作原理。还有其他更好的解决方案吗?

    【讨论】:

    • 目前存在一个错误,虽然它在首次加载时工作,但如果我尝试添加新消息,重新渲染每个消息,似乎无法刷新模板并清除出他们的内容。完全重新加载虽然有效。
    • 这是一个非常具体的用例,您找不到简化的解决方案。你在这里得到的是一个很好的方向。我将通过直接在第一个帮助程序中将[user] 替换为适当的值来简化这一点,它应该与更短的代码一样有效地工作。
    • 无赖,但你是完全正确的。我会试试看!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2013-12-24
    • 2023-03-16
    • 2016-05-30
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多