当前位置:首页 » JavaScript技术

Web组件 – 构建商业化应用的基石

2018-08-07 09:45 本站整理 浏览(9)

概述

Web Components(Web 组件)规范是一个新兴的技术集合,允许您在前端Web应用程序中定义已封装的自定义HTML元素。 使用Web Components,您可以创建自己声明的API来定义UI,从而创建您自己的商业化应用程序。

本文介绍了Web组件技术及其在新一代纯前端控件集 WijmoJS 中的应用。

Web组件核心技术

Web组件的核心技术由以下四个标准组成:

自定义元素Shadow DOMHTML模板HTML导入

自定义元素

自定义元素允许您创建自己的HTML元素,可以像标记HTML代码一样使用标记。

使用自定义元素,您可以:

以声明方式向标记添加元素。使用自定义属性定义其初始值,并使这些值自动传播到相应的属性值。使用标准Element.addEventListener方法订阅自定义事件。

纯前端控件集 WijmoJS 作为自定义元素

通过WijmoJS build 462,我们引入了 Web Components互操作用法,允许您将 WijmoJS 控件用作自定义元素。例如,您可以使用以下HTML添加包含列和过滤器的轻量前端表格控件FlexGrid:

<wjc-flex-grid id="grid">

<wjc-flex-grid-filter></wjc-flex-grid-filter>

<wjc-flex-grid-column binding="country" header="Country" width="*"/>

<wjc-flex-grid-column binding="date" header="Date"/>

<wjc-flex-grid-column binding="downloads" header="Downloads"/>

</wjc-flex-grid>

有了这个标记,你可以一方面使用传统的DOM API在Java代码中操作它,另一方面可以在HTML元素上使用访问控制特定的API。

例如:

选择FlexGrid元素:let grid = docement.getElementById('grid');调用表格方法:grid.autoSizeColumns();订阅表格事件:grid.addEventListener('updatedView',(e)=> {doSomething();});

这是一个Web Components Intro示例,可用于获取有关WijmoJS Web Components互操作用法的更多详细信息。

若使浏览器在本机离线工作,Web组件就要实现 ES2015(ES6)代码。为了实现这一点,WijmoJS 在build 462中添加了两个npm图像,wijmo-es2015-commonjs-min和wijmo-es2015-esm-min,它们分别包含CommonJS和ESM模块格式的WijmoJS ES6代码。

Web组件的商业化应用

无论是使用纯Java还是使用框架实现应用程序,都可以从Web组件的使用中受益。

纯Java中的Web组件

使用纯Java中的Web组件,您将获得一个声明,自定义可维护的HTML标记,而不用添加一堆这样的神秘元素定义:

<div id=”statGrid”/>

<div id=” inpSales”/>

使用WijmoJS 控件的 Web组件后,您还可以声明下面的标记:

<wjc-flex-grid>

<wjc-flex-grid-column binding=”date” header=”Date”/>

<wjc-flex-grid-column binding=”sales” header=”Sales”>

</wjc-flex-grid>

<wjc-input-number step=”1” format=”c2”/>

这段代码可用于无法以声明方式表示的特殊处理上。也就是说,您可以在正确的位置定义内容 - 标记中的UI及其在Java代码中的行为。

此标记目前在Chrome和Safari中原生使用,并且可以在使用Polyfills技术的其他浏览器中使用。

前端框架中的Web组件

用在 AngularReact 和 Vue 等前端框架中,Web Components会带来更多扩展,如属性、方法和绑定事件。Web Components 提供了为框架显式而创建的本地组件几乎相同的易用性功能。允许您在不同的框架中重用由它们创建的相同组件和行为库,而不会牺牲其易用性。

我们在Angular示例中添加了WijmoJS 的 Web组件,演示了它在Angular中的工作原理。

例如,以下HTML标记创建了 WijmoJS 的 InputNumber和LinearGauge控件,这些控件可用来显示和更新相同的模型属性。

注意:在实现这种双向绑定行为时,我们没有使用任何Java代码隐藏行和第三方库:

<wjc-input-number [value]="theValue" (value-changed)="theValue = $event.target.value"/> <wjc-linear-gauge [value]="theValue" (value-changed)="theValue = $event.target.value"/>

使用Web组件是否要考虑浏览器兼容性?

Web Components适用于所有浏览器。目前,您可以在Chrome和Safari中本地运行Web Components,而不应用任何Polyfill。

FireFox支持特定开发者模式下的Web组件。当然,这种支持很快会应用到实际使用版本中。现在,您也可以使用webcomponentsjs库中的webcomponents-lite.js polyfill在此浏览器中运行Web Components。

当然,Edge和 IE 中也可以使用。您可以通过运行ES5代码并应用webcomponentsjs库中的custom-elements-es5-adapter.js polyfill以及为FireFox指定的polyfill来在Internet Explorer中运行Web组件。

WijmoJS互操作用法和Web组件的未来?

我们已经在WijmoJS Web Components互操作用法方面解决了几个问题。首先是添加更多的示例,特别是在React,Vue和Polymer等不同框架中添加如何演示Web组件的使用示例。如果您需要在其他框架也添加上述示例,可以联系您的技术顾问。

总结

高度用户自定制一直是纯前端控件集WijmoJS的产品特色之一。因此,我们同样为WijmoJS控件添加了对Shadow DOM的支持和原生CSS样式支持的两种模式,Shadow DOM 允许控件可以通过CSS变量(a.k.a.自定义属性)进行自定义,当然这只是一种可选功能(可由全局属性切换),此技术的当前状态在控件定制中施加了严重限制。如果开发人员喜欢更灵活的自定制方式,也可以使用没有Shadow DOM的传统 WijmoJS Web组件。

关于葡萄城

赋能开发者!葡萄城公司成立于 1980 年,是全球领先的集开发工具、商业智能解决方案、管理系统设计工具于一身的软件和服务提供商。西安葡萄城是其在中国的分支机构,面向全球市场提供软件研发服务,并为中国企业的信息化提供国际先进的开发工具、软件和研发咨询服务。葡萄城的控件和软件产品在国内外屡获殊荣,在全球被数十万家企业、学校和政府机构广泛应用。