当前位置: 首页 > 编程日记 > 正文

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 wellinit: function(opts) {this.on('updated', function() { console.log('Updated!') })},getOpts: function() {return this.opts},setOpts: function(opts, update) {this.opts = optsif (!update) this.update()return this}
}<my-tag><h1>{ opts.title }</h1>this.mixin(OptsMixin)
</my-tag>

在上面这个示例中,你给页面中所有的my-tag标签增加了两个实例方法

getOpts和setOpts

来看下面的示例

var my_tag_instance = riot.mount('my-tag')[0]console.log(my_tag_instance.getOpts()) // will log out any opts that the tag has

另外,init方法是一个特殊的方法,

当一个riot标签加载一个mixin对象时,会执行init方法

init方法不是标签的实例方法,它是不可访问的

上面例子中,我们已经为my-tag设计了一个mixin对象OptsMixin,

那么我们想为这个对象补充一个方法该如何做呢?如下:

function IdMixin() {this.getId = function() {return this._id}
}var id_mixin_instance = new IdMixin()<my-tag><h1>{ opts.title }</h1>this.mixin(OptsMixin, id_mixin_instance)
</my-tag>

所以一个mixin对象可以是一个json对象,

也可以是一个方法的实例

全局的mixins

如果你需要为你所有的标签扩展方法

你就可以使用全局mixins

riot.mixin(mixinObject)

与共享mixins不同,全局mixins会直接被所有的标签加载;

要谨慎使用全局的mixins

HTML内嵌表达式

可以在HTML内部嵌入用大括号包裹的JS表达式,

大括号包裹的JS表达式既可以被用于文本标签,也可以被用于HTML属性

<h3 id={ /* attribute_expression */ }>{ /* nested_expression */ }
</h3>

下面举几个例子:

{ title || 'Untitled' }
{ results ? 'ready' : 'loading' }
{ new Date() }
{ message.length > 140 && 'Message is too long' }
{ Math.round(rating) }

为了使你的HTML标签保持clean

建议原则是尽量使用简洁的JS表达式

如果你的表达式演变的越来越复杂了

那么考虑把表达式里的一些逻辑转义到update事件中去,如下

<my-tag><!-- the `val` is calculated below .. --><p>{ val }</p>// ..on every updatethis.on('update', function() {this.val = some / complex * expression ^ here})
</my-tag>

HTML标签中,拥有布尔值的属性,比如checked, selected这类属性

当表达式的值为false的时候,这些属性是不会添加到HTML标签中的

下面两行代码是等价的

<input checked={ null }><input>

W3C规定,这类属性,就算你没给它设置值,只要他出现在HTML标签内,那么它就等价于给这类属性设置了true的值

再来看下面这行代码

<p class={ foo: true, bar: 0, baz: new Date(), zorro: 'a value' }></p>

这个标签的类名经过计算后是:foo baz zorro

因为bar的值是0,0就是false,只有值是true的才会被应用到标签上

这个特性不一定用于class,还可以用在别的地方

你还可以直接这样写:

<my-tag><p class={ classes }></p><script>hasAnimation() {return true}this.randomNumber = 5this.classes = {foo: true,bar: false,number: '3 > randomNumber',animated: 'hasAnimation()', //注意:这里要写成字符串的形式baz: new Date(),zorro: 'a value'}</script>
</my-tag>

经过计算后P的样式类有foo number animated baz zorro

HTML标签的行内样式也可以写成类似这样

<my-tag><p style={ styles }></p><script>this.styles = {color: 'red',height: '10rem'}</script>
</my-tag>

riotjs会自动把对象转换成描述样式的字符串

<p style="color: red; height: 10rem"></p>

那么如何打印大括号到浏览器呢?可以用下面这种方式:

\\{ this is not evaluated \\} 

你如果不喜欢用大括号来告诉riotjs哪行代码是你的表达式

你可以通过配置改变这一点:

riot.settings.brackets = '${    }'
riot.settings.brackets = '\{\{    }}'

注意,标注之间要用一个空格隔开

riotjs的表达式,只能输出(渲染)纯文本的字符串值;

不能输出(渲染)HTML的字符串值

但是,你可以通过变通的方式完成这项工作,如下:

<raw><span></span>this.root.innerHTML = opts.content
</raw><my-tag><p>Here is some raw content: <raw content="{ html }"/> </p>this.html = 'Hello, <strong>world!</strong>'
</my-tag>

注意,这样做很容易受到跨站脚本攻击,千万不要加载不受你控制的数据;

相关文章:

思必驰发布AI芯片,透视智能语音企业的商业化历程

2019 年 1 月 4 日&#xff0c;言由芯生——2019 年思必驰 AI 芯片暨战略发布会在京举行。 现场&#xff0c;AI 芯片作为重头戏展示了其低功耗、高性能的核心优势&#xff0c;同时&#xff0c;思必驰多视角解读了 2018 年所取成果&#xff0c;并公布了 2019 年战略路线&#x…

【转载from冰河】来杭十周年

2001年9月12日&#xff0c;我高中毕业考入浙江大学&#xff0c;开始了杭州的生活&#xff1b;今天算是来杭十周年纪念日。中午我在杭州四眼井国际青年旅舍准备了一只烤全羊&#xff0c;邀请浙大毽球协会成员和包括 Mazha、andyfires 和萝卜等当年在校期间一起搞计算机的朋友们一…

CNI:容器网络接口

CNI&#xff1a;容器网络接口CNI简介不管是 docker 还是 kubernetes&#xff0c;在网络方面目前都没有一个完美的、终极的、普适性的解决方案&#xff0c;不同的用户和企业因为各种原因会使用不同的网络方案。目前存在网络方案 flannel、calico、openvswitch、weave、ipvlan等&…

马云:你改变不了特朗普,你连你妈都改变不了,你要改变你自己

整理 | 非主流出品 | AI 科技大本营1 月 3 日&#xff0c;世界浙商上海论坛暨上海市浙江商会第十次会员代表大会在上海举行。马云在大会上发表主题演讲&#xff0c;依旧金句频出。回望 2018&#xff0c;马云表示&#xff0c;「2018 年确实很不容易&#xff0c;但是大家都度过了…

简述Field,Attribute,Property的区别

您要是关注我这个&#xff0c;说明您是行内人&#xff0c;那我就开门见山了&#xff0c;用代码来诠释吧 //Fieldprotectedstring_Version;//Attribute[XmlElement("Version")]//PropertypublicstringVersion{ set{ _Version value; } get{ return_Version; }}转载…

添加Soap头来增加Web Service的安全性

myService.asmx.cs 添加类&#xff1a;MyHeader 从 System.Web.Services.Protocols.SoapHeader继承 完整的代码如下usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingSystem.Web;usingSystem.Web.Services;//对…

BAT七年经验,却抵不过外企面试的两道算法题?

整理| 琥珀 出品| AI科技大本营又遇年底跳槽季&#xff0c;如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验&#xff0c;想要换份工作&#xff0c;面试时会主要考虑哪些因素&#xff1f;面试外企&#xff0c;却被两道算法题难住&#xff1f;近日&#xff0c;一位网友在脉脉…

#Ruby# Introspect (1)

Introspect&#xff0c;内省&#xff0c;是指从程序自身出发&#xff0c;审视程序各方面的能力。这个过程又称为Reflection&#xff0c;反射。 孔子曰&#xff0c;吾日三省吾身。于人于程序&#xff0c;内省都是非常重要的。 1. Looking at objects ObjectSpace.each_object([…

java.lang.IllegalMonitorStateException 异常出现原因

java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象&#xff08;O&#xff09;的监控器或者通知其他线程等待该对象&#xff08;O&#xff09;的监控器时&#xff0c;抛出该异常。 例子&#xff1a; //计算线程 //获取计算…

Tomcat init 脚本并添加服务自启动

很多用源码编译安装和一些用tar包直接解压缩的java程序都没有init脚本&#xff0c;不能像httpd或者nginx这种服务直接使用service httpd start&#xff0c;也不能使用/etc/init.d/httpd start 来启动。对于这种情况&#xff0c;我们可以自己写一个init脚本&#xff0c;并将命令…

算法 | 动画+解析,轻松理解「Trie树」

Trie这个名字取自“retrieval”&#xff0c;检索&#xff0c;因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词。 虽然发音与「Tree」一致&#xff0c;但为了将这种 字典树 与 普通二叉树 以示区别&#xff0c;程序员小吴一般读「Trie」尾部会重读一声&#xff0c;可…

#Ruby# Introspect (2)

3. Looking at Classes superclass > get the parent of any particular class ancestors > get both superclasses and mixin modules 在Ruby1.9中&#xff0c;任何未指定的class都继承自Object&#xff0c;而Object继承自BasicObject&#xff0c;BasicObject无supercla…

国内ITSM解决方案-UNIPER

UNIPER是行业领先的ITSM解决方案提供商。参与了ITIL V3的开发与实践&#xff0c;是中国ITSM行业推动者之一&#xff0c;方案包括服务台&#xff0c;事件和问题管理&#xff0c;变更和配置管理&#xff0c;服务等级管理&#xff0c;IT运营绩效考评&#xff0c;主动计划任务管理&…

清华首批7门标杆课程,到底有多牛?

整理 | Jane出品 | AI科技大本营近日&#xff0c;清华大学公布首批七门标杆课程。什么是标杆课程&#xff1f;据清华大学官方介绍&#xff0c;此项评选是 2018 年 4 月启动的&#xff0c;由各院系推荐、教务处形式审查。本次最终确定了 26 门课程参加评审&#xff0c;并于 2018…

我的Rails笔记(1)

《Agile Web Development With Rails》Notebook. 环境&#xff1a; Rails 3.1.0 Gem 1.8.10 Ruby ruby 1.9.2p180 1. rails depot 2. rails generate scaffold Product title:string description:text image_url:string price:decimal 报错&#xff1a;/1.9.1/gems/execj…

资源 | 斯坦福最新NLP课程上线,选择PyTorch放弃TensorFlow

整理 | Jane 出品 | AI科技大本营 今天在斯坦福大学 2019 年冬季 CS224n 最新课程已经正式更新到官网啦。新一年&#xff0c;大家可以开始跟着名校课程学起来啦~今年一个非常大的变化就是所有内容实现都使用 PyTorch&#xff0c;不再使用 TensorFlow。内容设计方面新增了 Tra…

推荐本人微博及浅谈发博原则

本人新浪微博&#xff1a;http://weibo.com/jinbinforever 花了一些力气&#xff0c;将关注数降到100以下&#xff0c;以后原则上关注数不会增加了。发现这样做的好处非常明显&#xff0c;减少了很多无谓的信息干扰。less is more&#xff0c;做减法能让自己收获更多&#xff0…

Lintcode108 Palindrome Partitioning || solution 题解

【题目描述】Given a strings, cutsinto some substrings such that every substring is a palindrome.Return the minimum cuts needed for a palindrome partitioning ofs.给定一个字符串s&#xff0c;将s分割成一些子串&#xff0c;使每个子串都是回文。返回s符合要求的的最…

发现价值(1)-无限的网络资源

Google发布Google wave的新闻甚嚣尘上.匆匆忙忙间,我也第一时间浏览了这个未来的杀手级应用.不得不赞叹Google强大创新力的同时,又不得不在自己的 to-read-list 上多了一个标签. 仅仅是read是不能产生任何价值的,对于技术我们需要dive into it.这点我明白,但是还是常常陷入浩如…

Ruby的Singleton method

Ruby中&#xff0c;特定于某一对象的方法被称为Singleton method。 例如&#xff1a; a "string"def a.runputs "#{self} run" endstr.run # >#string run run方法是特定于a这个对象的&#xff0c;故run方法是a的Singleton方法。 实现上&#xff0c;当…

AD ---- 活动目录的日常管理操作

管理信任关系:什么是信任关系:信任关系是用于确保一个域的用户可以访问和使用另一个域中资源的安全机制 根据传递性分,信任关系可分为可传递信任关系和不可传递信任关系两种 根据域之间关系分,Windows信任关系则可分为四种 信任关系是如何工作的 创建信任关系 删除信任关系 …

07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)...

GitHub实战系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/5038719.html —————————————————————————————————————————————————————— 直接实战~&#xff08;如果你之前安装了git其他版本都可以卸载了~这个就够了…

公开课报名 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段&#xff0c;在近年来随着深度学习的发展&#xff0c;强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能&#xff0c;最令我们瞩目的莫过于AlphaGo战胜李世石&#xff0c;以及OpenAI团队的机器人可以在团战…

Hibernate是啥?

1&#xff1a;Hibernate和JDBC、ODBC的作用是一样的、用来访问、操作数据库的。它的优势在哪&#xff1f;没用过、我也不知道。。。不过貌似【数据持久化】是个关键词。[下边是百科里的一段话&#xff1a;对象上数据的修改&#xff0c;Hibernate框架会把这种修改同步到数据库中…

#Java夜未眠# 读书笔记

微博上的蔡学镛是个有趣的家伙&#xff0c;有条微博这样写道&#xff1a; “记得十多年前我的第一本书出版时&#xff0c;我隔几天就到书店微服出巡&#xff0c;看看状况。当看到有人拿起我的书时&#xff0c;我内心的口白&#xff1a;"英明英明&#xff0c;你可真识货呀…

asp.net 控制页面css样式

asp.net 控制页面css样式fontDiv.Style["display"] "none";fontDiv.Style["display"] "";转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/06/02/1494709.html

腾讯AI Lab负责人张潼离职,张正友或接替其位

来源 | 网易智能 刚刚&#xff0c;据知情人士透露&#xff0c;腾讯人工智能实验室 AI Lab 主任张潼已经从腾讯离职&#xff0c;未来将重返学术界。 关于该消息&#xff0c;腾讯方面目前尚无回应。 网易智能独家获悉&#xff0c;AI Lab接手人是机器人实验室的张正友。 有消息…

频频霸榜的Python,竟遭开发者嫌弃!

在刚刚过去的 2018 年里&#xff0c;要说最热门的科技领域是哪一个&#xff1f;毋庸置疑的是&#xff0c;人工智能必排在前列&#xff1b;而要论编程语言界&#xff0c;最流行的编程语言是谁&#xff1f;那非 Python 莫属。2018 年 8 月&#xff0c;根据一年一度的 IEEE Spectr…

#每天一种设计模式# 观察者模式

系统常常会出现这种情况&#xff1a; 每一个部分需要知道整体的状态。比如Excel中&#xff0c;当你修改了一个单元格的值&#xff0c;可能横列的sum需要改变&#xff0c;纵列的sum需要改变&#xff0c;根据这个单元格做的图需要改变&#xff0c;是否被修改的按钮需要激活... 如…

el-input怎么绑定回车事件

在 Vue 2.0 中&#xff0c;为自定义组件绑定原生事件必须使用 .native 修饰符&#xff1a;<el-input v-model"queryForm.skuName" placeholder"请输入商品名称" keyup.enter.native"skuNameSearch"></el-input> 转载于:https://www.…