基本要求

一个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. octave手册

    GNU OCTAVE是一种高级语言,主要用于数值计算.它提供交互式命令行窗口,用于求解线性和非线性问题并计算出数值,并可以进行其它数值实验,还可以用来作为一个批量数据处理语言 运行Ocatve: oc ...

  2. Windows平台配置免安装的MySQL

    1.下载 官网下载免安装文件(本文使用的是mysql-5.6.33-win32.zip)解压到E:\MySQL\mysql-5.6.33打开E:\MySQL\mysql-5.6.33\my-defau ...

  3. Calendar - SGU 115(日期判断)

    这年的开始的第一天是星期 1 代码如下: =============================================================================== ...

  4. css文字超出一行用点表示

    1,css超出一行用点表示 white-space:nowrap; overflow:hidden; text-overflow:ellipsis; 2,css超出二行用点表示 overflow:hi ...

  5. ThinkPhp3.2.3 使用phpExcel导入数据

    public function uploadExcel(){ if (!empty($_FILES)){ $upload = new \Think\Upload(); // 实例化上传类 $uploa ...

  6. 关于OPEN_MAX宏undeclared的问题

    最近在看unp时,I/O复用-poll一章的代码使用到了OPEN_MAX.据书中描述,这一宏定义在limits.h头文件中,指代一个进程在任意时刻能打开的最大描述符数目.但在代码编译时遇到了错误,提示 ...

  7. Java Web部署到tomcat后,使用动态编译无法找到相关类的解决方案

    一.问题 动态编译java文件时(这个java文件虽引用了第三方jar包),如果这个过程发生在java命令行程序中,则正常编译.如果发生在JavaWeb中,然后此Java部署到Tomcat之后,执行动 ...

  8. Swift 类型转换

    1.类型转换 1.1 隐式类型转换 如 C 语言的类型转换 1.2 显式类型转换 Swift 语言是一种强类型语言,其整型的强制类型转换就是调用了参数类型对应的整形扩展构造方法,然后通过对应扩展构造方 ...

  9. 扩展C#与元编程(一)

    众所周知,Roslyn project已经开源一年多了.简单的说,Roslyn是:1)用C#/VB写的C#/VB的编译器,以及与IDE集成:2)编译器的功能以API的方式暴露出来(即一组DLL). R ...

  10. 增加MyEclips 智能提示功能

    一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...