riot.js最强大的功能,莫过于自定义标签,先来一段代码,看个效果:
[code]<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="riot.js"></script>
<script type="text/javascript" src="compiler.js"></script>
</head>
<body>
<!-- 调用自定义标签 -->
<timer start="10"></timer>
</body>
<!-- 最前面一定要有空格或tab,留意它的type -->
<script type="riot/tag">
<timer>
<h3>times: { index }</h3>
this.index = opts.start || 0;
var self = this;
tick(){
// 每个1秒,index自增
this.index++;
// 调用this.update更新ui【最欣赏这个了,能自己控制】
this.update();
}
var timer = setinterval(this.tick, 1000);
</timer>
</script>
<!-- 调用riot,启动自定义标签timer -->
<script type="text/javascript">
riot.mount("timer");
</script>
</html>
效果如下[每个1秒,times的值,就+1]:
说一下,新人会遇到的坑:
script type=”riot/tag”
compiler会遍历所有带有script type=”riot/tag” 的元素,如果script有src,则会加载外部的文件,如果没有src,则编译script里的内容。
ps: script中编写的内容,必须是空格或tab开头,如果直接跟着 “<”,是编译不出内容的。
这跟它内部的解析器有关【第一次还挺坑的…】
tick()
该函数的this对象,是当前的自定义标签的context,只要 xx(){} 这样声明的函数,context都被指定为标签的context
可通过this.tick访问 tick 函数
this.update
必须调用 this.update(); ui的内容才会更新。
可能会觉得没其它mv*的引擎自动化,但是,手动控制返回会更加灵活
opts
代码中,有个很奇怪的变量opts:
[code]this.index = opts.start || 0;
其实它的值,就是 this.opts,是自定义标签传入的属性。
如:[code]<timer start="10"></timer>
那 this.opts.start/opts.start 就等于 10
{ index }
riot.js强大的读值方法,它支持简单的表达式,三元判断。但是有一个坑,{}里,要用单引号\’代替双引号\”,不然超级容易解析出错。
像 { index || 10 }, { index > 10 ? ‘老头’ : ‘小屁孩’ },都可以支持
支持引用外部标签定义文件
[code]<script src="todo.tag" type="todo/tag"></script>
todo.tag的内容和编译,按照上面例子编写即可。
以上就是riot.js 学习【一】自定义标签的内容。