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

简介: 基本要求 一个riot标签,就是展现和逻辑的组合(也就是html和JS) 以下是编写riot标签最基本的规则: 先撰写HTML,再撰写JS,JS代码可以写在标签内部,但这并不是必须的; 当riot标签定义在document body之内时,其内部不能使用script标签; 当riot...

 

基本要求

一个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:对本文部分文字和修辞方式做了修改

目录
相关文章
|
16天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
15天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
15天前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
15天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
32 7
|
16天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
21天前
|
JavaScript 前端开发 Go
异步加载 JS 的方法
【10月更文挑战第24天】异步加载 JavaScript 是提高网页性能和用户体验的重要手段。通过使用不同的方法和技术,可以实现灵活、高效的异步加载 JavaScript。在实际应用中,需要根据具体情况选择合适的方法,并注意处理可能出现的问题,以确保网页能够正常加载和执行。
|
16天前
|
JavaScript 前端开发 开发者
|
JavaScript 前端开发
ActiveX组件与JavaScript交互
1.在COM组件中调用JavaScript函数// 连接点方式页面javascript脚本        alert("State(" + s + ")");        return 123;        testCom.
1044 0
|
JavaScript 前端开发 C++
一步一步实现ATL开发的ActiveX组件与javascript的交互(一)
1.      打开VS2008,单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“ATLtest”。在随后出现的项目向导中,使用默认配置即可。
1631 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
97 2