最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

NodeJS框架Express的模板视图机制分析_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 20:59:59
文档

NodeJS框架Express的模板视图机制分析_javascript技巧

NodeJS框架Express的模板视图机制分析_javascript技巧:模板引擎 Express支持许多模板引擎,常用的有: haml 的实现Haml haml.js 接替者,同时也是Express的默认模板引擎Jade 嵌入JavaScript模板EJS 基于CoffeeScript的模板引擎CoffeeKup 的NodeJS版本jQuery模板引擎 视图渲染(view ra
推荐度:
导读NodeJS框架Express的模板视图机制分析_javascript技巧:模板引擎 Express支持许多模板引擎,常用的有: haml 的实现Haml haml.js 接替者,同时也是Express的默认模板引擎Jade 嵌入JavaScript模板EJS 基于CoffeeScript的模板引擎CoffeeKup 的NodeJS版本jQuery模板引擎 视图渲染(view ra

模板引擎

Express支持许多模板引擎,常用的有:

  • haml 的实现Haml
  • haml.js 接替者,同时也是Express的默认模板引擎Jade
  • 嵌入JavaScript模板EJS
  • 基于CoffeeScript的模板引擎CoffeeKup
  • 的NodeJS版本jQuery模板引擎
  • 视图渲染(view randering)

    视图的文件名默认需遵循“.”的形式,这里是要被加载的模块的名字。比如视图layout.ejs就是在告诉视图系统要require(‘ejs'),被加载的模块必须输出exports.compile(str, options)方法,并要返回一个函数来遵守Express的模板接口约定。我们也可以使用app.register()来映射模板引擎到其它文件扩展名,从而实现更灵活的模板引擎行为,如此一来就可以实现“csser.html”可以被ejs引擎所渲染。

    下面我们将用Jade引擎来渲染index.html,因为我们没有设置layout:false,index.jade渲染后的内容将被作为body本地变量传入layout.jade。
    代码如下:
    app.get('/', function(req, res){
    res.render('index.jade', { title: 'CSSer, 关注Web前端技术!' });
    });


    新增的“view engine”设置可以指定默认模板引擎,如果我们想使用jade可以这样设置:
    代码如下:
    app.set('view engine', 'jade');


    于是我们就可以通过下面的方式:
    代码如下:res.render('index');


    代替如下方式:
    代码如下:res.render('index.jade');


    当“view engine”设置后,模板的扩展名就成了可选项,同时我们还可以混合匹配多模板引擎:
    代码如下:res.render('another-page.ejs');


    Express同时提供了视图选项设置,这些设置会在每次视图渲染后应用,比如你并不经常使用layouts,就可以这样设置:
    代码如下:app.set('view options', {
    layout: false
    });


    如果需要,这些设置可以在后续的res.render()调用中被覆盖:
    代码如下:res.render('csser-view.ejs', { layout: true });


    可以通过指定一个路径的方式来实现用自己的layout来代替系统默认的,比如如果我们将“view engine”设置为jade并且自定义了一个名为“./views/mylayout.jade”的layout,我们可以这样使用它:
    代码如下:res.render('page', { layout: 'mylayout' });


    否则必须指定扩展名:
    代码如下:res.render('page', { layout: 'mylayout.jade' });


    这些路径也可以是绝对路径:
    代码如下:res.render('page', { layout: __dirname + '/http://www.gxlcms.com/mylayout.jade' });


    这方面较好的例子就是自定义ejs模板的开始和关闭的标记:
    代码如下:app.set('view options', {
    open: '{{',
    close: '}}'
    });


    局部视图(View Partials)
    Express视图系统原生支持局部和集合视图,这称作微型视图,主要用于渲染一个文档片段。比如与其在视图中循环显示评论,不如使用局部集合(partial collection):
    代码如下:partial('comment', { collection: comments });


    如果不需要其它选项或本地变量,我们可以省略对象而简单的传入评论数组,这和上面的示例是一样的:
    代码如下:partial('comment', comments);


    当使用局部集合时,支持一些“魔术”本地变量:

  • firstInCollection 当为第一个对象时该值为true
  • indexInCollection 集合中对象的索引值
  • lastInCollection 当为最后一个对象时为true
  • collectionLength 集合的长度
  • Local variables passed (or generated) take precedence, however locals passed to the parent view are available in the child view as well. So for example if we were to render a blog post with partial(‘blog/post', post) it would generate the post local, but the view calling this function had the local user, it would be available to the blog/post view as well.

    传入(或生成)的本地变量优先,但传入父视图的本地变量在子视图仍有效。因此如果我们用partial(‘blog/post', post)来渲染博客日志时,将生成post的本地变量,但调用本函数的视图拥有本地用户,它在blog/post视图依然有效。(一回注:这段翻译感觉有问题,请高人指点)。

    性能提示:当使用局部集合渲染100长度的数组就意味着需要渲染100次视图,对于简单的集合你可以将循环内联,而不要使用局部集合,这样可以减少系统开销。

    视图查找(View Lookup)

    视图查找是相对于父视图进行的,比如我们有一个名为“views/user/list.jade”的页面视图,如果在该视图中调用 partial(‘edit'),视图系统将会尝试查找并加载“views/user/edit.jade”,而partial(‘.. /messages')将加载“views/messages.jade”。

    视图系统还支持索引模板,这样你就可以使用一个同名的目录。比如,在一个路由中我们执行res.render(‘users'),这将指向“views/users.jade”或者“views/users/index.jade”。

    当使用上面的索引视图时,我们可以通过partial(‘users')从同名目录下引用“views/users/index.jade”,同时视图系统会尝试“../users/index”,这能减少我们调用partial(‘index')的需要。

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    NodeJS框架Express的模板视图机制分析_javascript技巧

    NodeJS框架Express的模板视图机制分析_javascript技巧:模板引擎 Express支持许多模板引擎,常用的有: haml 的实现Haml haml.js 接替者,同时也是Express的默认模板引擎Jade 嵌入JavaScript模板EJS 基于CoffeeScript的模板引擎CoffeeKup 的NodeJS版本jQuery模板引擎 视图渲染(view ra
    推荐度:
    标签: js 的模板 视图
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top