基本要求

一个riot标签,就是展现和逻辑的组合(也就是html和JS)

以下是编写riot标签最基本的规则:

先撰写HTML,再撰写JS,JS代码可以写在<script>标签内部,但这并不是必须的;

当riot标签定义在document body之内时,其内部不能使用script标签;

当riot标签定义在单独的文件中时,其内部才可以使用script标签;

如果JS代码没有写在<script>标签内部,

那我们就认为最后一个HTML标签结尾之后就是JS代码;

riot标签可以是空的,或者只有HTML,或者只有JS;

引号是可选的,<foo bar={baz}>等价于<foo bar="{baz}">;

相似的ES6编码风格:

methodName(){  }等价于this.methodName=function(){  }.bind(this)

这里的this总是指向当前的标签实例;

<div class={selected:flag}></div>当flag变量是true的时候,该DIV的class属性是selected;

<input checked={ undefined }> 等价于 <input>

所有的属性名称必须是小写(浏览器规范要求);

riot标签可以支持自闭合标签<div />等价于<div></div>;<br> <img> <hr>等标签编译之后并不会自闭合;

riot标签必须闭合(或者自闭合)

标准HTML标签,例如label,table等也可以被重写,但不建议这么干

riot标签也可以拥有自己的属性;

在document body中自定义riot标签,必须注意缩进格式;

tab键的缩进与空格缩进是不同的,这要注意;

不用写<script>标签

<todo>

<!-- layout -->

<h3>{ opts.title }</h3>

// logic comes here

this.items = [1, 2, 3]

</todo>

this.items = [1,2,3]就是JS代码,可以正确执行

riotjs标签内部最后一个html标签结束后,就可以直接写JS代码,不用把JS代码写在<script>标签内部;

声明预处理器

你可以通过type属性指定一个JS的预处理器

<my-tag>
  <script type="coffee">
    # your coffeescript logic goes here
  </script>
</my-tag>

目前支持coffee,typescript,es6和none;

你也可以写成这样:type = 'text/coffee';

标签样式

你可以在riot标签内部插入<style>标签,并在内部编写样式;

Riotjs会自动把<style>标签内部的东西,插入到html的head节中;

这个调整过程,只会发生一次,不管这个riot标签在页面内实例化多少次;

如果你想控制这个调整过程,你可以在head标签内加入一个这样的标签:

<style type='riot';></style>

这样的话标签内的样式就都会转义到该区块内了;

<todo>

<!-- layout -->

<h3>{ opts.title }</h3>

<style>

/** other tag specific styles **/

h3 { font-size: 120% }

/** other tag specific styles **/

</style>

</todo>

Riotjs支持scoped伪类;但目前还不支持shadow dom;

我不建议你使用scoped伪类;因为这玩意儿已经被W3C废除了;

Riotjs将在4.x版本支持shadow dom;

关于shadow dom的内容,请参考:

https://www.toobug.net/article/what_is_shadow_dom.html

关于riotjs 4.x升级的内容,请参考:

https://github.com/riot/riot/issues/2283

关于scoped伪类,请参考:

https://developer.mozilla.org/en-US/docs/Web/CSS/:scope

装配方法

你可以通过如下方式装配组件

<body>
 
  <!-- place the custom tag anywhere inside the body -->
  <todo></todo>
 
  <!-- include riot.js -->
  <script src="riot.min.js"></script>
 
  <!-- include the tag -->
  <script src="todo.js"></script>
 
  <!-- mount the tag -->
  <script>riot.mount('todo')</script>
 
</body>

在body区域内的自定义标签,必须通过这种方式闭合:<todo></todo>

这种闭合方式是错误的:<todo />

下面是其他集中装配组件的方式

// 自动装配当前页面上所有的自定义组件
riot.mount('*')
 
// 通过指定的ID装配组件
riot.mount('#my-element')
 
// 装配选中的组件
riot.mount('todo, forum, comments')

一个页面可装配的组件的数量是不受限制的

上一篇文章的地址:http://www.cnblogs.com/liulun/p/7672876.html

20171113:对本文部分文字和修辞方式做了修改

riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法的更多相关文章

  1. riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期

    前文回顾 riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法 riot.js教程[一]简介 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可 ...

  2. riot.js教程【四】Mixins、HTML内嵌表达式

    前文回顾 riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期: riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法: riot.j ...

  3. riot.js教程【五】标签嵌套、命名元素、事件、标签条件

    前文回顾 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期: riot.js教程[二] ...

  4. riot.js教程【六】循环、HTML元素标签

    前文回顾 riot.js教程[五]标签嵌套.命名元素.事件.标签条件 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入 ...

  5. riot.js教程【一】简介

    Riotjs简介 Riotjs是一款简单的.优雅的.组件化UI前端开发框架: 他支持自定义标签(custom tags),拥有令人愉悦的语法,优雅的API和非常小的体积: 为什么需要一个新的界面库 前 ...

  6. JS模块化工具require.js教程(二):基本知识

    前一篇:JS模块化工具我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等 基本API require会定义三个变量:define,r ...

  7. C#模板编程(2): 编写C#预处理器,让模板来的再自然一点

    在<C#模板编程(1):有了泛型,为什么还需要模板?>文中,指出了C#泛型的局限性,为了突破这个局限性,我们需要模板编程.但是,C#语法以及IDE均不支持C#模板编程,怎么办呢?自己动手, ...

  8. js生成二维码的jquery组件–qrcode

    js生成二维码的jquery组件–qrcode 2015/01/30 / 2508 VIEWS / JAVASCRIPT, JQUERY 有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码. ...

  9. 网站开发进阶(十二)JS实现打印功能(包括打印预览、打印设置等)

    JS实现打印功能(包括打印预览.打印设置等) 绪 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章.其中绝大部分文章都是使用的Lodop5.0(Web打印和套打 ...

随机推荐

  1. 2nd_SE-结对编程1-基于flask框架的四则运算生成器

    0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...

  2. 团队作业8——Beta项目(冲刺计划)

    Beta阶段冲刺计划 经过几周的努力我们完成了Alpha的开发,进过一段时间的调整与重组我们继续向Beta版进发. 1. 新成员介绍 林乔桦(201421123074):掌握c语言,JavaScrip ...

  3. 201521123106《java程序设计》第三周学习总结

    1. 本周学习总结 2. 书面作业 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pub ...

  4. 201521123110《Java程序设计》第1周学习总结

    1.第一周学习总结 `本周开始了对java的初次学习接触,Java是一门新的编程语言不同于C,由于有了c的基础,对于Java的理解和学习也相对从前学C更容易些. 也学习了Java的诞生发展以及运用包括 ...

  5. 201521123024 《java程序设计》 第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容.

  6. 201521123085《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  7. Sublime自定义语法

    以thinkphp框架的assign函数为例 在sublime\Data\Packages\PHP下 新建文件:assign.sublime-snippet 内容为 <snippet> & ...

  8. 接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析

    (最近学的都是很基础的接口测试,都是基于UI界面可见的接口,就是发请求,接收响应,分析返回的结果,校验,对共通模块进行封装,仅此而已,其实做自动化的思路基本都是如此,UI也是.) 现在开始用httpC ...

  9. mongodb 常用的命令

    mongodb 常用的命令 对数据库的操作,以及登录 1 进入数据库 use admin 2 增加或修改密码 db.addUser('wsc', '123') 3查看用户列表 db.system.us ...

  10. 一篇搞定Python正则表达式

    1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义 2 字符类    1. 包含在[]中的一个或者多个字符被称为字符 ...