Meteor js:使用#each 来迭代和渲染博客的多个 html 文件中的模板

Posted

技术标签:

【中文标题】Meteor js:使用#each 来迭代和渲染博客的多个 html 文件中的模板【英文标题】:Meteor js: use #each to iterate over and render templates in multiple html files for a blog 【发布时间】:2013-12-26 00:16:12 【问题描述】:

我知道流星并不完全是为了这个,但我已经实施了这个网站,所以现在没有回头路了。

我拥有的是一系列博客文章。现在它们都在一个大模板中。我想将它们拆分成一个 html 文件,然后在呈现博客布局模板时遍历这些 html 文件。

如何做到这一点?我也愿意接受其他实现相同最终目标的解决方案/方法(允许我更好地组织这些独立的静态 html 片段)

【问题讨论】:

为什么不将您的博客文章以 HTML 格式保存在数据库中,然后检索它们并用三括号 blogContent 显示它。我错过了什么吗? 对于一些页面,比如博文,我真的只需要添加静态html即可。要将 html 放入数据库,我仍然需要某种方法来遍历所有静态 html 文件。那么我将如何遍历 blogpost1.html 和 blogpost2.html 以将它们保存到数据库中。 【参考方案1】:

你可以这样做

#each post
    #if isBlogPost
        > blogPostTemplate
    else
        > someOtherTemplate
    /if
/each

然后您可以将模板放在不同的文件中,例如

file1.html

<template name="blogPostTemplate">
    title
</template>

file2.html

<template name="someOtherTemplate">
    Other Template, Maybe for ads?
</template>

如果每个帖子都需要一个 html 文件

Template.blog.getPost = function(templateName) 
    return Meteor.render(Template[templateName]);

然后你可以使用类似这样的东西,它允许你使用从 js 对象或集合传递的自定义模板名称

getPost 'blogPostTemplate'

【讨论】:

谢谢阿克沙特!这正在接近,但仍然有点偏离目标。如果我以你为例,我想要完成的是拥有一个 blogPostTemplate,但是在那个 blogPostTemplate 中有 #each > blogPost /each 并且 blogPost 对象是一个集合我所有的博客文章。不过这里的问题是我想用保存在单独的 HTML 文件中的其他模板填充该集合。也许有一个通配符运算符来获取所有类似命名的模板,或者我需要 Npm.require('fs') 并扫描文件系统中的 html 文件并解析它们。 带着第一个想法奔跑。您可以执行类似 return Template[*] 的操作来获取所有模板或仅返回与给定字符串的一部分匹配的模板。然后我可以在它们中搜索特定的命名约定,例如如果模板被命名为“BlogPostX”和“BlogPostY”,我会这样做 if indexOf("BlogPost") == 0 然后添加到 blogPosts 对象。

以上是关于Meteor js:使用#each 来迭代和渲染博客的多个 html 文件中的模板的主要内容,如果未能解决你的问题,请参考以下文章

使用 Meteor 时如何正确设置嵌套 #each 空格键迭代器的范围?

Meteor - #每个数组的迭代,在每个第 n 项之后插入另一个 HTML 元素

误解 `each...in` 渲染与反应变量

在 Meteor 的模板渲染函数中访问父数据上下文

如何访问 Meteor 中选项的上下文?

React-Router 和 Meteor 无法在刷新时使用参数渲染路由