首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EJS和eleventy进行组件组合(包含在includes中)?

如何使用EJS和eleventy进行组件组合(包含在includes中)?
EN

Stack Overflow用户
提问于 2019-05-30 19:54:02
回答 1查看 565关注 0票数 2

我正在使用Eleventy,一个静态站点生成器来构建一个网站。它支持很多模板语言,但EJS看起来是最好的,因为它“仅仅是JavaScript",除了我不知道如何进行组件组合,或者它是否可能。我们可以说,EJS文档严重缺乏。

我想要实现的类似于你在React或Vue中使用props.children<slot>所做的事情,在那里你可以组合组件,但这里显然是用分式来完成的。

例如,假设我有一个网格项部分,它接受它可以呈现的大小,它的标记名和“孩子”,类似于:

代码语言:javascript
复制
<%- include('../grid-item', {
  size: '50',
  tag: 'li',
  children: ANOTHER-INCLUDE,
}); %>

然而,即使是上面的例子也有一些限制,所以我真正想要实现的是:

代码语言:javascript
复制
<%- include('../grid', {
  tag: 'ul',
}, () => { %>
  <%- include('../grid-item', {
    size: '50',
    tag: 'li',
  }, () => { %>
    <div>ANY MARKUP</div>
  <% }); %>
<% }); %>

这个是可能的吗?我是不是从错误的角度来处理这个问题?

Eleventy支持使用Nunjucks和Liquid的Paired Shortcodes解决这个问题,但这两种模板语言似乎都有严重的局限性,比如你甚至不能创建数据对象。

EN

回答 1

Stack Overflow用户

发布于 2020-08-24 21:52:51

您可以使用Javascript Template Functions来实现这一点。

我设置了一个在我的.eleventy.js配置文件中导入的components.js文件。该组件文件被传递给eleventyConfig对象,然后定义如下组件:

代码语言:javascript
复制
eleventyConfig.addJavaScriptFunction("componentName", function(props) { … });

然后,您可以通过this访问js模板中的该函数。

代码语言:javascript
复制
module.exports = function(data) {
  return `
    <div>
      ${this.componentName(props)}
    </div>
  `;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56377826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档