开始用Jade吧
不废话了,直接上使用过程,欢迎各位使劲喷
1、布局
- block
- include 包含
- extends 引用
关于这三者,其实没什么好说的,include,建议先看看这里,理解一下细节即可,个人觉得记住两点即可:
如果A.jade通过include调用B.jade,那路由要指向A页面 如果A.jade通过extends继承B.jade,那路由要指向B页面
一个例子说明:
//- layout.jade
doctype html
html
head
block title
title Default title
body
block content
//- index.jade
extends ./layout.jade
block title
title Article Title
block content
h1 My Article
include includes/g/editAccountInfo
//- sonPage.jade
h3 hello
p world
注意,这个例子的router一定是这个样子滴
router.get('/', function(req, res, next) {
res.render('index', {});
});
2、变量
调用变量有四种方式
- #{表达式}
- =表达式
- !=表达式
- -console.log(‘this code running on server’)
3、if
- if (page =='0')
include includes/home
4、for
- for(var i=0;i<Arr.length;i++){
p papapa #{Arr[i]}
- }
5、case
- var gril = serverGril
case gril
when 0 : p loli
when 1 : p student
when 2 : p ol
default: p damn single
6、markdown
:markdown
# Markdown 标题
这里使用的是 MarkDown 格式
script
:coffee
console.log '这里是 coffee script'
7、Mixin
抱歉,我还没用到这个,不乱说了,大家可以看看官网,或者等更
8、上一个自己写的玩具
做web开发一定用到各种输入表,so我懒得一个一个写了,就搞了个这么个玩意
1、维护一个数组,格式随意啦
//config.js
module.exports = [
{
"paramName":"companyName",
"showName":"单位名称",
"type":"input",
"inputType":"text",
"cookie":"companyName"
},
。。。
}
2、拦截请求,塞参数
//index.js
router.get('/:name', function(req, res, next) {
var paramNum = [0,1,2,3,4,5,6,7,8,9,10,11];
var tableParam = [];
for(var i=0;i<paramNum.length;i++){
var temp = paramNum[i];
tableParam.push(config[temp]);
}
req.tableConfig = tableParam;
next();
});
router.get('/:name', function(req, res, next) {
var routeID = req.params.name;
res.render('index', {
nowpage: routeID ,
tableConfig: req.tableConfig,
mainTitle:req.mainTitle,
subTitle:req.subTitle,
formTitle:req.formTitle
});
});
3、遍历传来的数组,生成页面
//saveModule.jade 部分代码
div(class="box-body")
- var opArr = tableConfig
- for(var i=0;i<opArr.length;i++){
- if(opArr[i].type == 'input'){
div(class='form-group')
label(class='col-sm-4 control-label')&attributes({"for":opArr[i].paramName}) #{opArr[i].showName}
div(class='col-sm-8')
input(class="form-control")&attributes({"type":opArr[i].inputType,"placeholder":opArr[i].default,"id":opArr[i].paramName})
- }
- if(opArr[i].type == 'selection'){
div(class='form-group')
label(class='col-sm-4 control-label')&attributes({"for":opArr[i].paramName}) #{opArr[i].showName}
div(class='col-sm-8')
select(class="form-control")
- var arr = opArr[i].default
- console.log(arr)
- for(var j=0; j<arr.length;j++){
option #{arr[j]}
- }
- }
4、正面照
9、结束语
如果你的团队有一到两个不讲究的程序员,那么你还是老老实实的用ejs吧,因为jade的缩进适合处女座 如果你想把你的idea快速的实现成一个完整的demo或者application,用jade吧,你还可以自己写静态api数据接口 留个讨论的话题,用jade来生成代码和reactjs来创建组件,你更喜欢哪个?为什么?
感觉jade代码缩进很容易出错
楼主界面画得好看啊, 最近也在学jade, 请问一下:
- 如果一句代码太长了要怎么换行啊? 直接回车就被缩进了.
- 可以webpack热替换或者其他工具同步吗?
- 是先造一些数据单独造数据写好界面, 然后再开发后台吗? 这时候又要怎么调试啊? 一直F5好不方便啊.
- 楼主使用的模板引擎中间件支持jade的filter?
用jade写模板就是爽啊, 从此告别尖括号, 尝试了用react作为模板来写, 太蛋疼了, 多了一堆代码. 还没有学redux和react-router但是好像很难和jade配合起来, 感觉基因不一样啊. 混一起好别扭
- 有两种换行的方式,第一种就是括号内换行,jade会自动处理的,第二种就是内容的换行,可以用
|
或者.
,详细请看官方文档。 - 同步是指什么?
- 不管是什么模板语言,都是一样的。肯定是先写一个死的页面,调试好页面之后再加入数据
- 请问楼主
@XGHeaven 额, 我遇到一种情况
div
!= render(WorksWrapper({'works': works, 'session': session, 'isLiked': isLiked}))
因为用到了locals, 如意要用!=
进行赋值, 而用|
或者.
是block或者plain text的换行, 如果我想在上面的栗子中的逗号换行的话, 查了一下没有发现解决方法.