riot.js学习【三】事件

每个自定义标签从编译到构建,到最后的销毁,riot.js都提供了相应的事件。

内置有4种事件:

  1. update

    在标签真正刷新UI前执行。它允许我们在更新UI前,改写context的数据

  2. updated

    在标签UI更新之后执行。这时候,我们可以对dom进行操作了

  3. mount

    在标签构建完成,放在页面后执行。

  4. unmount

    当标签从页面移除的时候执行。【一般是调用this.unmount()时执行】


打个例子:

<!Doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <script type="text/javascript" src="riot.js"></script>
    <script type="text/javascript" src="compiler.js"></script>
</head>
<body>

    <todo></todo>

</body>

<!-- 最前面一定要有空格或TAB -->
<script type="riot/tag">
    <todo>
        <p>一个自定义标签 BY { title || "" }</p>

        // 监听4种事件
        // 执行顺序,跟绑定顺序无关
        this.on("updated", function(){
            // 这里可以操纵DOM
            console.log("updated");
        }).on("mount", function(){
            console.log("mount");
        }).on("unmount", function(){
            console.log("unmount");
        }).on("update", function(){
            // 这里可以注入数据
            this.title = "da宗熊";
            console.log("update");
        });
    </todo>
</script>

<script type="text/javascript">
    riot.mount("todo");
</script>
</html>

效果如下:

图片

输出分别为: update -> updated -> mount
因为没有调用this.unmount();
所以没打印出 unmount

事件的绑定,也可以类似jquery一样,一次绑定多个事件,又或者自己去触发事件

绑定多个:

this.on("update mount", function(){
    // update和mount都会经过这里
});

触发事件:

this.trigger("update", "参数1", "参数2"...);

新手遇坑:

  1. unmount事件,在this.unmount()之后触发,或者自定义标签,重新构建时,自动触发

    riot.mount("todo");
    riot.mount("todo"); // 第二次会先触发unmount,然后才是update/updated/mount
  2. 事件回调的第一个参数,并不是event

    this.on("update", function(a, b){
        console.log(a, b); // 1, 2
    });
    this.trigger("update", 1, 2);

    这一点跟jquery是大大的不一样

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值