简单、强大的swig.js

Swig.js

A simple, powerful, and extendable JavaScript Template Engine。

简单概括:JS模板引擎。

Why to use

  • 根据路劲渲染页面
  • 面向对象的模板继承,页面更复用
  • 动态页面
  • 快速上手
  • 功能强大
  • Others

How to use

参见swig.js官网

项目实例

页面复用

大部分页面都有header 和 footer区域,可以通过继承页面实现复用,具体如下:

layout.html

<html>
<head>
</head>
<body>
  <div class="header-container">
  ...
  </div>

  {% block content %}{% endblock %}

  <div class="footer-container">
  ...
  </div>
</body>
</html>

welcome.html

// 依据实际目录填写
{% extends ‘../layout.html‘ %}
{% block content %}
<div class="content-container">
  <h1>hello swig.js</h1>
</div>
{% endblock %}

信息、功能函数配置化

企业信息、所有权、工商注册号等信息,可将这些信息存在在system-params.json中,还可以添加实时计算函数,然后通过swig.js显示和调用:

system-params.json:

{
  "isDevMode": "true",
  "corporation": "CCCCCCCC",
  "ICPNumber": "沪ICP备xxxxxxxx号",
  ...
}

app.js

var systemParams = require(‘./config/system-params.json‘),
    swig = require(‘swig‘);
swig.setDefaults({
  cache: !systemParams.isDevMode,
  locals: {
    now: function () {
      return new Date();
    },
    systemParams: systemParams
  }
});

layout.html

<html>
...
<body>
  {% block content %}{% endblock %}

  <div class="footer-container">
    <p class="text-center">
      <span>Copyright ? {{now() | date(‘Y‘)}}</span>
      <span>{{systemParams.corporation}}</span>
      <span>{{systemParams.ICPNumber}}</span>
    </p>
  </div>
</body>
</html>

Express.js 和 Require.js整合

在Express.js中通过swig.js路劲渲染页面,页面中使用require.js的require(deps, callback)形式加载页面需要的js:

app.js

app.engine(‘html‘, swig.renderFile);
app.set(‘view engine‘, ‘html‘);
app.set(‘views‘, __dirname + ‘/views‘);

routers.js

module.exports = [{
  path: ‘/‘,
  view: ‘default/welcome‘,
  data: {
    title: ‘welcome‘,
    requireScripts: [
      ‘controllers/default/welcome-controller‘
    ],
    styles: [
      ‘default/welcome.css‘
    ]
  }
}];

config-routers.js

var routers = require(‘./routers‘);
...
for ... {
  ...

  router.get(routers[i].path, function(req, res) {
    res.render(routers[i].view, routers[i].data, routers[i].callback);
  });
}

layout.html

<html>
<head>
  ...

  {% if styles %}
    {% for style in styles %}
      <link rel="stylesheet" href="{{style}}" />
    {% endfor %}
  {% endif %}

  ...
</head>
<body>
  ...

  <script type="text/javascript">
    var GlobalConfig = {
      requireScripts: []
    };

    // add require scripts by page config
    {% if requireScripts %}
      {% for script in requireScripts %}
      GlobalConfig.requireScripts.push(‘{{ script }}‘);
      {% endfor %}
    {% endif %}
  </script>

  <script src="/lib/require/require.js"></script>
  <!-- require.js配置信息 -->
  <script src="/main.js"></script>
  <!-- require(deps, callback)加载页面依赖js -->
  <script src="/bootstrap.js"></script>
</body>
</html>

bootstrap.js

// add others js
GlobalConfig.requireScripts.push(‘...‘);

requirejs(GlobalConfig.requireScripts, function () {
  // todo
}

Others

Super Quick Start:

Swig.js docs

时间: 2024-08-08 05:39:09

简单、强大的swig.js的相关文章

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

简单粗暴地理解js原型链--js面向对象编程

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

一个简单且丑陋的js切换背景图片基础示例

不多说,直接上代码,非常基础的一个原生js切换元素背景图片范例 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>原生JS范例</title> <script type="text/javascript"> function changeBg()

强大自己的js库(持续跟新)

①判断是否是整数! function isInteger(obj) {     return typeof obj === 'number' && obj%1 === 0 } 强大自己的js库(持续跟新)

基于jquery的bootstrap在线文本编辑器插件Summernote 简单强大

Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Opera.Internet Explorer 9 +(IE8支持即将到来). 特点: 世界上最好的WYSIWYG在线编辑器 极易安装 开源 自定义初化选项 支持快捷键 适用于各种后端程序言语 使用方法 使用html5文档 1 2 3 4 <!DOCTYPE html> <html> ..

用简单的方法实现js中日期的加减法

今天就算对JS中日期的加减法做个总结,一共两步 第一步,引入date.format.js,这个JS的作用是将日期转为指定的格式,代码如下 var dateFormat = function () {     var    token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,         timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mount

通过一个简单闭包,弄懂JS执行原理

<script> function f1()            {                var age = 18; function f2()                {                    alert('我今年:'+age+'岁');                } return f2;            }                var func3 = f1(); func3();</script>            闭包

FusionCharts简单教程(二)-----使用js加载图像和setDataXML()加载数据

前面一篇对FusionCharts进行了一个简单的介绍,而且建立了我们第一个图形,但是那个是在HTML中使用<OBJECT> 和<EMBED>标记来加载图形的,但是这样做是非常不“理智”的.这样做除了代码量比较大外,还有并不是所有的人能够看懂上面的代码.但是 使用JS后就可以避免上面几个问题了. 一.使用JS加载FusionCharts图形 下面就分五个步骤讲解如何使用js来加载FusionCharts图形. 第一步:导入FusionCharts.js文件 [javascript]

从现在开始,使用简单优雅的validata.js

表单验证,是后台开发中万年不变的话题,在经历许多实战之后发现 使用优雅便捷的validate.js实现验证实在是一件非常愉悦的事情 <form data-validate> Enter: <input type="password" data-rule="密码:required;number[请输入一个整数];equals(target)"/> <input type="password" id="targ