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

前文回顾
riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法;
riot.js教程【一】简介;

访问DOM元素

你可以通过this.refs对象访问dom元素

而且还有大量的属性简写方式可以使用

比如:if="{...}",(有时候你需要对这些东西做一些特殊的处理才能用)

使用Jquery

如果你想在riot标签内部访问dom元素

你可能需要了解一下riot标签生命周期相关的知识

你会注意到,mount方法还没执行的时候,dom元素是不会被创建的

这就意味着,mount方法之前访问DOM元素,是不会成功的

请看如下代码:

<example-tag>
  <p id="findMe">Do I even Exist?</p>
  <script>
  var test1 = document.getElementById('findMe')
  console.log('test1', test1)  // Fails
  this.on('update', function(){
    var test2 = document.getElementById('findMe')
    console.log('test2', test2) // Succeeds, fires on every update
  })
  this.on('mount', function(){
    var test3 = document.getElementById('findMe')
    console.log('test3', test3) // Succeeds, fires once (per mount)
  })
  </script>
</example-tag>

也就是说,你只要在正确的函数中使用jquery是一点问题都没有的;

再看下面的代码(两种检索方式都是支持的,第一种就是jquery检索DOM)

<example-tag>
  <p id="findMe">Do I even Exist?</p>
  <p>Is this real life?</p>
  <p>Or just fantasy?</p>
  <script>
  this.on('mount', function(){
    // Contexted jQuery
    $('p', this.root)

    // Contexted Query Selector
    this.root.querySelectorAll('p')
  })
  </script>
</example-tag>

mount输入参数

你可以在初始化的时候为riotjs标签传入更多参数,比如:

<script>
riot.mount('todo', { title: 'My TODO app', items: [ ... ] })
</script>

你可以传递任何类型的数据;

可以是一个简单的object;

也可以是动态变化的数据存储(flux store)

在标签内部,你可以使用如下方法访问这些输入参数

<my-tag>
  <!-- Options in HTML -->
  <h3>{ opts.title }</h3>
  // Options in JavaScript
  var title = opts.title
</my-tag>

riotjs标签的生命周期

riotjs标签按照如下步骤构造及渲染

  1. Tag构造
  2. Tag内部的js执行
  3. Tag内部的HTML中的表达式被执行
  4. Tag在浏览器上渲染,mount事件触发

一个riotjs标签在浏览器上渲染,mount事件触发后,何时会被更新呢?

  1. 当一个Tag内的事件被触发的时候(除非你设置了禁止更新变量e.preventUpdate为true)
  2. 当在Tag实例内部调用this.update()的时候
  3. 当在一个父组件实例内部调用this.update()的时候(该父组件下的所有子组件都会更新)
  4. 当调用riot.update()的时候(会触发全局更新)

当一个组件执行更新后,会触发update事件

监听生命周期事件

<todo>

  this.on('before-mount', function() {
    // before the tag is mounted
  })

  this.on('mount', function() {
    // right after the tag is mounted on the page
  })

  this.on('update', function() {
    // allows recalculation of context data before the update
  })

  this.on('updated', function() {
    // right after the tag template is updated after an update call
  })

  this.on('before-unmount', function() {
    // before the tag is removed
  })

  this.on('unmount', function() {
    // when the tag is removed from the page
  })

  // curious about all events ?
  this.on('*', function(eventName) {
    console.info(eventName)
  })

</todo>

你可以为一个事件设置多个监听

时间: 2024-11-13 08:00:53

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

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

前文回顾riot.js教程[四]Mixins.HTML内嵌表达式riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 标签嵌套 让我们定义一个父标签account,一个子标签subscription <account> <subscription plan={ opts.plan } show_details="true&quo

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

前文回顾riot.js教程[五]标签嵌套.命名元素.事件.标签条件riot.js教程[四]Mixins.HTML内嵌表达式riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 循环 可以通过each属性来达到标签循环,如下: <todo> <ul> <li each={ items } class={ completed: d

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

前文回顾riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 共享Mixins 混合开发可以使你很好的复用代码,如下所示: var OptsMixin = { // the `opts` argument is the option object received by the tag as well init: function(opts) {

原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法_javascript技巧

用原生js在父页面获取iframe子页面的元素,以及在子页面获取父页面元素,这是平时经常会用到的方法,这里写一个例子来总结下: 1.父页面(demo.html),在父页面修改子页面div的背景色为灰色,原来为红色: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

riot.js教程【一】简介

题记 这是一个系列文章的第一篇 如果关注riot.js的人,可以关注我的博客: 我接下来会持续不断的发这一块的文章: 系列文章内容大多来自官网翻译:  Riotjs简介 Riotjs是一款简单的.优雅的.组件化UI前端开发框架: 他支持自定义标签(custom tags),拥有令人愉悦的语法,优雅的API和非常小的体积: 为什么需要一个新的界面库 前端开发框架的确已经非常多了,但还是没有令人足够满意的东西,reactjs貌似是来解决问题的,但是用过的人都知道,它有很多令人不爽的弱点,我们相信Ri

Jquery源码分析---构建Jquery的Dom元素

在jQuery.fn.init函数中,最终的结果是把Dom元素放到jQuery对象的集合, 我们可以传入单个Dom元素或Dom元素集合直接把其存到jQuery对象的集合.但是 如果第一个参数是string类型的话,如#id就要把Dom文档树去查找.对于html的 片断就得生成Dom元素.我们再进一步,传入的单个Dom元素或Dom元素集合参数 又是从那里来的?我们可以通过Dom元素的直接或间接的查找元素的方式. 这一部分首先分析如何从html的片断就得生成Dom元素,然后分析jQuery 是如何通

减少访问DOM的次数提升javascript性能

 访问DOM元素是有代价的,修改DOM元素则更为昂贵,因为它会导致浏览器重新计算页面的几何变化.    当然,最坏的情况是在循环中访问修改元素,尤其是对HTML元素集合循环操作.    例如:   代码如下: <!-- 优化前 -->  <script type="text/javascript">  function innerHTMLLoop () {  for(var count = 0; count < 15000; count++){  docu

jQuery利用sort对DOM元素进行排序操作_jquery

前言 排序对于我们是再熟悉不过了,在绝大数应用程序中都会有这样一个场景:当我们从服务器端获取一个列表时,在界面上进行渲染,我们可以会依赖于某一个规则来进行排序,当然此时绝大多数会再次与服务器进行交互来进行重新渲染列表到客户端,这样做未尝不可,但是在有些情况下,我们既不需要利用框架也不需要重新生成列表到客户端,明明可以在客户端进行,达到我们的目的,为何要再一次发送请求到服务器呢?下面我们来看看. 话题 我们首先看看在w3c中js的sort方法. <script type="text/java

《jQuery Cookbook中文版》——1.5 过滤DOM元素包装器集

1.5 过滤DOM元素包装器集 1.5.1 问题 在jQuery包装器集中有一组选中的DOM元素,但是打算从集合中删除不匹配新指定表达式的元素,以创建一个新的操作元素集合. 1.5.2 解决方案 jQuery过滤器方法用于DOM元素的jQuery包装器集,可以排除不符合指定表达式的元素.简言之,可以用filter()方法过滤当前元素集,这是过滤器方法与jQuery查找方法的重要区别,查找方法通过寻找(使用新的选择器变量)新元素(包括当前包装器集的子元素)来缩小DOM元素的包装器集. 为了理解过滤