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" />
</account>

<subscription>
  <h3>{ opts.plan.name }</h3>

  // Get JS handle to options
  var plan = opts.plan,
      show_details = opts.show_details

  // access to the parent tag
  var parent = this.parent

</subscription>

注意:show_details的命名方式,这里不能写成驼峰式的名字,因为浏览器解析标签的时候会把大写转成小写

接下来我们把account标签添加到页面的body中

<body>
  <account></account>
</body>

<script>
riot.mount('account', { plan: { name: 'small', term: 'monthly' } })
</script>

父标签的参数是通过riot.mount方法传递的,子标签的参数是通过标签属性传递过去的

注意:嵌套的标签总是在父标签内部声明,定义;

标签内嵌入HTML

我们先定义一个my-tag标签

<my-tag>
  <p>Hello <yield/></p>
  this.text = 'world'
</my-tag>

注意:这里有一个yield占位符,我们稍后再讲它

现在我们在页面上使用这个标签

<my-tag>
  <b>{ text }</b>
</my-tag>

那么他渲染出来之后,是如下这个样子的:

<my-tag>
  <p>Hello <b>world</b><p>
</my-tag>

你看到了吗?yield占位符输出的,其实是text变量

这就是在标签内嵌入HTML代码

命名元素

当元素具备ref属性的时候,

这个元素会被链接到this.refs上,

这样你就可以很方便的用JS访问到它

<login>
  <form ref="login" onsubmit={ submit }>
    <input ref="username">
    <input ref="password">
    <button ref="submit">
  </form>

  // grab above HTML elements
  submit(e) {
    var form = this.refs.login,
        username = this.refs.username.value,
        password = this.refs.password.value,
        button = this.refs.submit
  }

</login>

注意,这个指向的操作,是在mount事件被触发前完成的,所以你可以在mount事件中访问到this.refs

事件

DOM事件可以直接和riotjs标签内的方法绑定,示例如下:

<login>
  <form onsubmit={ submit }>

  </form>

  // this method is called when above form is submitted
  submit(e) {

  }
</login>

只要事件名以on开头的,比如:onclick, onsubmit, oninput,都可以直接绑定方法

这类事件也可以直接绑定一句表达式,如下:

<form onsubmit={ condition ? method_a : method_b }>

在事件方法内,this指代本标签实例,方法执行完之后,会马上执行this.update()事件,

如果你在方法内部,使用了event.preventUpdate,那么方法执行完之后,就不会执行this.update()事件;

方法的第一个参数就是标准的event对象

  • e.currentTarget 指代触发事件的DOM元素
  • e.target 也指代触发事件的DOM元素
  • e.which 指代按键代码 (keypress, keyup, 等).

标签条件

你可以使用标签条件来决定是否需要显示一个标签,如下:

<div if={ is_premium }>
  <p>This is for premium users only</p>
</div>

注意,标签条件的值可以是一个变量,也可以是一个表达式

除了if之外,还可以使用show和hide来决定是否显示一个标签

show – 当值是true的时候,相当于 style="display: ''"

hide – 当值是true的时候,相当于 style="display: none"

if – 当值是true的时候,会把该标签加入到DOM元素中,是false的时候,不会把标签加入到dom元素中

时间: 2024-10-11 03:20:41

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

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教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期

前文回顾riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可以使用 比如:if="{...}",(有时候你需要对这些东西做一些特殊的处理才能用) 使用Jquery 如果你想在riot标签内部访问dom元素 你可能需要了解一下riot标签生命周期相关的知识 你会注意到,mount方法还没执行的时候,dom元素是不会被创建的 这就意味着,mount方法

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) {

riot.js教程【一】简介

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

javascript-关于JS读取form表单的问题,form中嵌套table,input标签放入table中

问题描述 关于JS读取form表单的问题,form中嵌套table,input标签放入table中 <html> <head></head> <body> <form id = "form1" name = "form1" action = "b.html" method = "post"> <table id = "tab" name =

Backbone.js系列教程五:Backbone.Events

Backbone.Events概述 Backbone.Events对象包含的方法有助于observer设计模式和一个调用pub/sub的可变observer模式.这些功能允许Backbone创建的不同类的对象(JavaScript对象)彼此解耦而相互通信.这是通过扩展(也就是_.extend(Model.prototype, Backbone.Events);)以下构造函数而完成的,所使用的函数都属于Backbone.Events: Backbone.Model() Backbone.Colle

MyBatis学习教程(五)-实现关联表查询方法详解_java

一.一对一关联  1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR() ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VAR

JSP教程(五)-JSP Actions的使用下

js|教程  jsp:useBean Action 的使用 一. 语法: <jsp:useBeanid="beanInstanceName"scope="page|request|session|application"{ class="package.class" |type="package.class" |class="package.class" type="package.clas

html-JQuery如何获取以及修改DD标签内HTML元素

问题描述 JQuery如何获取以及修改DD标签内HTML元素 您已选择: 假如我这个dd标签内有HTML元素,我想动态的获取或编辑该DD标签内HTML元素,请问jQuery能实现吗?我用.html()试过,val()试过,都没有获取成功,能不能不从他上级元素入手直接对DD标签进行操作,求帮助 解决方案 原来是自己在页面加载的时候将其清空了所以获取不到元素.简直极度不细心.. 解决方案二: jquery 获取元素本身HtmljQuery获取各种html标签的值jquery获取标签里的值html,v