体验jade
发布于 9 年前 作者 CarlosRen 6363 次浏览 最后一次编辑是 8 年前 来自 分享

开始用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、正面照

untitled1.png

9、结束语

如果你的团队有一到两个不讲究的程序员,那么你还是老老实实的用ejs吧,因为jade的缩进适合处女座 如果你想把你的idea快速的实现成一个完整的demo或者application,用jade吧,你还可以自己写静态api数据接口 留个讨论的话题,用jade来生成代码和reactjs来创建组件,你更喜欢哪个?为什么?

4 回复

感觉jade代码缩进很容易出错

楼主界面画得好看啊, 最近也在学jade, 请问一下:

  1. 如果一句代码太长了要怎么换行啊? 直接回车就被缩进了.
  2. 可以webpack热替换或者其他工具同步吗?
  3. 是先造一些数据单独造数据写好界面, 然后再开发后台吗? 这时候又要怎么调试啊? 一直F5好不方便啊.
  4. 楼主使用的模板引擎中间件支持jade的filter?

用jade写模板就是爽啊, 从此告别尖括号, 尝试了用react作为模板来写, 太蛋疼了, 多了一堆代码. 还没有学redux和react-router但是好像很难和jade配合起来, 感觉基因不一样啊. 混一起好别扭

@wewea

  1. 有两种换行的方式,第一种就是括号内换行,jade会自动处理的,第二种就是内容的换行,可以用|或者.,详细请看官方文档。
  2. 同步是指什么?
  3. 不管是什么模板语言,都是一样的。肯定是先写一个死的页面,调试好页面之后再加入数据
  4. 请问楼主

@XGHeaven 额, 我遇到一种情况

div 
    != render(WorksWrapper({'works': works, 'session': session, 'isLiked': isLiked}))

因为用到了locals, 如意要用!=进行赋值, 而用|或者.是block或者plain text的换行, 如果我想在上面的栗子中的逗号换行的话, 查了一下没有发现解决方法.

回到顶部