LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
简单使用hyperHTML — 第二部分
pinguxx 2018-10-15

部分 2 作者 Paul Thompson and Ivan Torres(唐华).

Version en español

English version

翻译人: Hades

https://medium.com/easy-apps-with-hyperhtml

    1. 简介wire/bind

    2. 事件和组件

    3. 更多状态和简单状态管理

    4. 引用类型和自定义类型

    5. 自定义元素

    6. 自定义我的”自定义元素”

    7. 小测试!

    8. 异步加载,占位符和代码补全

    9. Handling routes

    10. 第三方类库


如果你看完第一部分, 现在你就知道了关于hyperHTML的基础了. 这次我们要深入了解一下. 回忆一下我们在第一部分中建立的表:

https://stackblitz.com/edit/basics-table?ctl=1&embed=1&file=index.js

让我们从表头的列的排序开始.

事件

首先,我们把之前的例子中的渲染部分移植到一个函数中,以便复用. 例子如下:

https://gist.github.com/pinguxx/1fa59056bb9a78acfc6ebc7b78eeda43#file-render-simple-table-js

我们将它变成下面的样子:

https://gist.github.com/pinguxx/ca3f9fd8356e2df57abdfc7590f8fd3f#file-render-simple-table-fn-js

接下来我们要做的是更新列头,包含一个 <a> 标签, 为了让用户知道这是一个可点击的地方. 我们还需要一个监听事件去捕获单击事件. 为了简单明了, 我们添加一个 data-target 参数, 为了让开发者知道用户想要对哪一列进行排序. 通过这里的这些步骤我们的 <thead> 模板就告一段落了:

https://gist.github.com/pinguxx/1f9886d5da544065bd67e3d31b4b3fae#file-render-simple-table-fn-2-js

什么是 onclick ? HyperHTML 允许我们传入一个函数并且它会被我们调用. 让我们创建一个简单的排序函数,去看看会发生什么:

https://gist.github.com/pinguxx/24b43256a8e3f9ba799926187ab03868#file-render-simple-table-sort-js

在这个例子中,我们的目标和当前的几点是相同的.很好!现在我们有了一个包含data-target的锚点,就是用来排序的锚点.让我们更新一下我们的排序函数:

https://gist.github.com/pinguxx/71b23929ed5e65bf2e4e547791194b7c#file-render-simple-table-sort-1-js

是不是看起来不错,但是如果用户第二次点击这表头,这个表就不能再次返回原来的顺序了.这是我们需要的功能,所以让我们一起修复这个问题然后看看它是怎么工作的.

https://stackblitz.com/edit/basics-table-1

如果你查看这个表的代码了,你会看到,只有内容行被重新绘制了,即使我们每次都调用显示方法(display).HyperHTML 非常聪明,它只更新了被改变的那部分.所以这就证明了它的执行有多快,渲染函数使用起来有多简单.


组件

现在我们的表也有了, 接下来就更简单了,如果我们把所有相关的代码都放到一个单独的地方.然后清空我们的代码, 我们可以在其他的项目中复用这个表.我们可以用一个简单的对象证明:

https://stackblitz.com/edit/basics-table-2

之前我们有一个带HTML的基础JS对象,作为我们的渲染变量 ,数据作为我们的数组变量和状态. 我们把render()函数从display()函数中移出来, 然后注意:我们就没有排序sort()函数了. 取而代之, 我们传入”this”到单击事件中:

onclick=${this}

并用...处理它

HandleEvent

这是一个非常特殊的函数,它是EcmaScript标准的一部分.If an object has it, 它会作为 obj.handleEvent(e)被调用. 这就意味着我们可以附带一个事件监听器

el.addEventListener('click',Table)

然后单击事件会被传到handleEvent函数中. this 将成为当前对象(不是元素!).在我们处理事件的时候,这可以解决很多典型的问题.关于更多handleEvent的炫酷内容查看下面的连接:

https://medium.com/@WebReflection/dom-handleevent-a-cross-platform-standard-since-year-2000-5bf17287fd38

另外,你也可以使用一个函数去构建你的对象,就像你期待的那样.

https://stackblitz.com/edit/basics-table-3

上面的内容非常相似,唯一一个变化就是我们添加了一个id到这个表中.如果你不想使用classes去实现的话,你可以这么做,而且hyperHTML允许这么做.

之前的看起来都不错,但是如何使用classes呢?你可能会想,也许都差不多吧.

https://stackblitz.com/edit/basics-table-4

现在我们有了一个class,唯一修改的地方 是去调用属性参数,并且传一个id到一个对象的里面.也没什么特别的,就是简单的增强.

同时,hyperHTML也可以使用一个非常简单的方式去创建一个组件.它就是:hyper.Component.这个函数提供给我们一些额外的扩展:

  • state handling(状态处理)

  • default html attribute binded to itself(绑定默认属性)

  • handleEvent, but even easier!(处理事件,甚至更简单)

  • onconnected and ondisconnected functions(连接和断开函数)

  • and more(更多)

关于更多hyper.Component点击下面的链接  

https://viperhtml.js.org/hyperhtml/documentation/#components-3

介绍的够多的了,一起看一下具体应用的例子!!

https://stackblitz.com/edit/basics-table-5

首先我们导入Component(组件)到我们的我们的导入中import(就是hyper.Component), 然后我们用这个表去继承它.这个组件Componentclass 会作用于“this.html”,所以我们就移除它.

使用组件去处理事件

我们的处理事件函数在哪?其实组件已经包含了这个处理函数了,所以我们不需要找了!定义组件处理事件就像这样:

this[‘on’+ event.type](e)

这个的意思是:如果你正在监听一个单击事件,handleEvent 将会收到“click”事件的类型并且会调用this.onclick(e),现在我们就有了我们每一个自己的”事件类型”函数 onclick(e){…}.

你甚至可以拥有一个定义处理自定义事件的函数!例如,say you are emitting 一个自定义事件,“enroll”. 你可以附加一个监听器:

onenroll=${this}

然后代替组件去处理它,如下:

onenroll(e){/* do stuff with the enroll event! */}

https://gist.github.com/pinguxx/9c2187b8039c9ab50903b3de31fa1e03#file-custom-event-js

回到这个表中,现在我们有onclick函数,去处理表头上的单击事件和排序功能.

 

状态值State

注意,我们添加过的 getdefaultState(){...}这个函数.这是个返回初始化状态的函数,如果你还没有设置或者更新状态值,你会得到一个默认值.了解更多请点击documentation

我们也添加了 onclick (sortfunction)函数,和一个调用 setState的函数.SetState 这个函数会更新状态值并且会神奇般的自动地执行渲染.其他的框架会同步更新这个状态,但是由于更新操作在hyperHTML框架种处理的非常快,setState这个函数会立马响应并执行.如果你需要更新几个值,我推荐构造一个对象然后再调用setState(newobj)函数一并更新.例子如下:

https://gist.github.com/pinguxx/62051dc580005a9dbf34d5850a82af46#file-updating-state-js

 


这次我们看到了很多代码.在坚持一下,其实我们只是刚刚接触到hyperHTML的皮毛.在接下来的部分,我们会学习在一个app中如何使用大量组件,如何去做条件限制渲染和更详细的组件介绍.

推荐文章
评论(0)
联系我们|招贤纳士|移动客户端|风格模板|官方博客|侵权投诉 Reporting Infringements|未成年人有害信息举报 0571-89852053|涉企举报专区
网易公司版权所有 ©1997-2024  浙公网安备 33010802010186号 浙ICP备16011220号-11 增值电信业务经营许可证:浙B2-20160599
网络文化经营许可证: 浙网文[2022]1208-054号 自营经营者信息 工业和信息化部备案管理系统网站 12318全国文化市场举报网站
网信算备330108093980202220015号 网信算备330108093980204230011号
分享到
转载我的主页