Egg: 建议:为模板引擎可以设置一个默认继承的layout。每个子页面都写一个extend,太麻烦了。

Created on 7 Jun 2017  ·  7Comments  ·  Source: eggjs/egg

首先非常感谢egg团队做出这么好的开源库。

需求

使用了nunjucks模板引擎后。希望能直接约定一个默认的layout文件,作为所有子页面默认继承的模板。

至少可以在config.default.js,可以配置所有页面的默认模板就更好了。

不然,大部分页面都需要写一个 extend,太令人悲伤了。

再次感谢。

Most helpful comment

这个跟你怎么用 nunjucks 有关,你完全可以写一个公共的 layout,在 layout 中 extend,然后再 include 你需要渲染的 page 。

layout

{% extend 'XXX' %}
{% block body %}
  {% include __pageUrl__ %}
{% endblock %}

然后你 render 的时候,只需要指定 __pageUrl__ 即可。不需要每个页面都去 extend

All 7 comments

这个跟你怎么用 nunjucks 有关,你完全可以写一个公共的 layout,在 layout 中 extend,然后再 include 你需要渲染的 page 。

layout

{% extend 'XXX' %}
{% block body %}
  {% include __pageUrl__ %}
{% endblock %}

然后你 render 的时候,只需要指定 __pageUrl__ 即可。不需要每个页面都去 extend

thanks

@whxaxes 按您所说,其实还是需要在controller里面指定 pageUrl。已经很不错了,谢谢哈。

框架如果能做到如下几点,就更牛逼了:
1、让用户设置路由规则,而不是具体的路由。app启动后,根据路由规则和controller自动生成所有的路由。

2、controller里面渲染,默认就渲染view文件夹下面对应控制器名字文件夹下面的 控制器方法名相同的 模板文件。

这样就做到更好的 约定大于配置了。

仅仅建议,我也明白前端 模板碎片化严重,可能约定过于干涉用户自由。取舍,还看你们了。

@malun666 egg 提供了很灵活强大的插件机制。如果你觉得这样用起来更舒服,完全可以根据你自己的需求,基于 egg 来定制一套自己的框架哈。

已经开始自己写插件呢。谢谢了。
@whxaxes

其实你应该去 nunjucks 提

1、让用户设置路由规则,而不是具体的路由。app启动后,根据路由规则和controller自动生成所有的路由。

  • 问题在于这个「路由规则」并没有什么通用的规范,你可以描述下看看
  • 「自动映射路由」其实并没有省事,反而有可能会导致误注册,或者是需要临时屏蔽的路由出问题
  • 还有就是 app.get('/admin', app.role.can('admin'), app.controller.admin.index) 这样带有前置条件的路由是如何描述,到了最后,Controller 里面就变为一个 json 了,那跟 router 有什么区别呢?也许未来支持注解后,才有更好的方案。
  • https://github.com/eggjs/egg/issues/882

其实还是需要在controller里面指定 pageUrl
2、controller里面渲染,默认就渲染view文件夹下面对应控制器名字文件夹下面的 控制器方法名相同的 模板文件。

  • 这个你其实可以在 app/extend/context.js 里面提供一个 renderPage 的方法,来做默认值。
Was this page helpful?
0 / 5 - 0 ratings