Omi教程-生命周期和事件处理

生命周期

名称 含义 时机
constructor 构造函数 new的时候
install 初始化安装,这可以拿到用户传进的data进行处理 实例化
installed 安装完成,HTML已经插入页面之后执行 实例化
uninstall 卸载组件。执行remove方法会触发该事件 销毁时
beforeUpdate 更新前 存在期
afterUpdate 更新后 存在期

示意图

Omi教程-生命周期和事件处理

举个例子

class Timer extends Omi.Component {
constructor(data) {
super(data);
} install () {
this.data = {secondsElapsed: 0};
} tick() {
this.data.secondsElapsed++;
this.update();
} installed(){
this.interval = setInterval(() => this.tick(), 1000);
} uninstall() {
clearInterval(this.interval);
} style () {
return `
.num { color:red; }
`;
} render () {
return `<div>Seconds Elapsed:<span class="num"> {{secondsElapsed}}</span></div>`;
}
}

点击这里→在线试试

事件处理

Omi的事件分内置事件和自定义事件。在内置事件处理方面巧妙地利用了浏览器自身的管线机制,可以通过event和this轻松拿到事件实例和触发该事件的元素。

内置事件

什么算内置事件?只要下面正则能匹配到就算内置事件。

on(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave)

内置事件怎么绑定?如下所示:

class EventTest extends Omi.Component {
constructor(data) {
super(data);
} handleClick(dom, evt){
alert(dom.innerHTML);
} render () {
return `<div onclick="handleClick(this, event)">Hello, Omi!</div>`;
}
}

自定义事件

开发者自己定义的组件的事件,称为自定义事件,自定义事件必须以on开头,即onXXXX的格式,不然Omi识别不到。这里拿分页作为例子:

import Omi from '../../src/index.js';
import Pagination from './pagination.js';
import Content from './content.js'; Omi.makeHTML('Pagination', Pagination);
Omi.makeHTML('Content', Content); class Main extends Omi.Component {
constructor(data) {
super(data);
} installed(){
this.content.goto(this.pagination.data.currentPage+1);
}
handlePageChange(index){
this.content.goto(index+1);
} render () {
return `<div>
<h1>Pagination Example</h1>
<Content name="content" />
<Pagination
name="pagination"
data-total="100"
data-page-size="10"
data-num-edge="1"
data-num-display="4"     
onPageChange="handlePageChange" />
</div>`;
}
} Omi.render( new Main(),'body');

如上面的onPageChange就是自定义事件,触发会执行handlePageChange。onPageChange方法是在Pagination中执行:

import Omi from '../../src/index.js';

class Pagination extends Omi.Component {
...
...
...
linkTo: "#",
prevText: "Prev",
nextText: "Next",
ellipseText: "...",
prevShow: true,
nextShow: true,
onPageChange: function () { return false; }
}, this.data); this.pageNum = Math.ceil(this.data.total / this.data.pageSize);
}
goto (index,evt) {
evt.preventDefault();
this.data.currentPage=index;
this.update();
this.data.onPageChange(index);
}
...
...
...
}

这里取了Pagination组件的部分代码。高亮的就是执行onPageChange的地方。

相关地址

招募计划

Omi教程-生命周期和事件处理

上一篇:linux 安装开启SNMP协议,最下面是yum安装


下一篇:SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块