ember*3.5 处理事件

你可以通过事件处理程序响应组件上的用户事件,如双击,鼠标悬停和按键事件。只需要将你想要响应的事件的名称实现为组件上的方法。

例如,想象我们有一个这样的模板:

{{#double-clickable}}
    This is a double clickable area!
{{/double-clickable}}

让我们这样实现double-clickable,当它被点击时,出现一个弹窗:

//in component double-clickable.js

export dafault Component.extend({
    doubleClick() {
        alert("这个组件被点击啦!")
    }
})

浏览器事件可能会冒泡DOM,这可能会连续地定位父组件。从组件中的事件处理方法中启用冒泡return true

import Component from '@ember/component';
import Ember from 'ember';

export default Component.extend({
    doubleClickable() {
        console.info("这个组件被点击啦");
        return true;
    }
})

请参阅本页末尾的事件名称列表。任何事件都可以定义为组件中的事件处理程序。

发送Action

某些情况下你的组件需要定义事件处理程序,可能为了支持各种可拖动的行为。例如,一个组件收到丢弃事件时,可能需要发送一个id

{{ drop-target dropAction=(action 'didDrop') }}

你可以定义组件的事件处理程序来管理这个丢弃事件。并且如果你需要,你也可以通过使用return false来阻止事件冒泡。

//in component drop-target.js

export default Component.extend({
    attributeBindings: ['draggable'],
    draggable: true,
    
    dragOver() {
        return false;
    },

    drop(event) {
        let id = event.dataTransfer.getData('text/data');
        this.dropAction(id);
    },
})

在上面的组件中,didDrop是传进来的action。这个action从drop事件处理程序被调用,并将一个参数传递给这个action——通过drop事件对象找到的id值。

另一种保留原来的事件处理程序并且使用一个action的方法是将(闭包)action分配给内联事件处理程序。考虑下面这个包含一个button元素上的onclick处理程序的模板:

<button onclick={{action "signUp"}}> Sign Up</button>

这个signUpaction只是一个定义在组件的actions哈希上的函数。由于这个action被分配给内联处理程序,函数定义可以将事件对象定义为他的第一个参数。

actions: {
    signUp(event) {
        // 只有把这个action分配给一个内联处理程序的时候,这个事件对象才会作为第一个参数被传递给action
    }
}

actions中定义的函数的正常行为不会将浏览器事件作为参数接收。因此,action的函数定义无法定义事件参数。以下示例演示了使用action的默认行为。

<button {{action "sianUp"}}>Singn Up</button>
actions: {
    signUp() {
        //没有时间对象被传入这个action中
    }
}

要将event对象用作函数参数:

  • 在组件中定义事件处理程序(用于接收浏览器事件对象)
  • 或者,将action分配给模板中的内联事件处理程序。(它创建一个闭包操作,并将事件对象作为参数接收)

事件名称

上述事件处理示例相应一组事件。下面列出了内置事件的名称。可以使用Application.customEvents注册自定义事件。

触摸事件:

  • touchStart
  • touchMove
  • touchEnd
  • touchCancel

键盘事件:

  • keyDown
  • keyUp
  • keyPress

鼠标事件:

  • mouseDown
  • mouseUp
  • contextMenu
  • click
  • doubleClick
  • mouseMove`
  • focusIn
  • focusOut
  • mouseEnter
  • mouseLeave

表格事件:

  • submit
  • change
  • focusIn
  • focusOut
  • input

HTML5拖放事件:

  • dragStart
  • drag
  • dragInter
  • dragLeave
  • dragOver
  • dragEnd
  • drop
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,498评论 1 11
  • 一. Java基础部分.................................................
    wy_sure阅读 3,812评论 0 11
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,130评论 0 21
  • 想到花儿,我们的大脑会一些美好不期而遇。不管身在何地,是何种肤色,何种语言,用一束花儿就能表达你我之间的善意。有多...
    专注养生100年不动摇阅读 512评论 1 1
  • 写在前面: js里面如果存在两个定时器,他们会相互影响。window.innerWidth是可视区域的宽度 1:...
    Djknight阅读 972评论 0 0