【发布时间】:2015-10-20 05:18:39
【问题描述】:
我正在使用 HTML5 Web 组件(HTML 导入、影子 DOM、模板和自定义 HTML 元素)设计一个 Web 应用程序,该组件是用 vanilla JavaScript(无框架)实现的。 Web 应用程序相当简单,并且必须作为单页应用程序来实现。应用程序的部分要求是用户界面应该是可定制的。
设计方法
该示例使用<application-navigation> 自定义元素。此元素通过自定义事件(例如,new CustomEvent('application-navigation', {location:'/sign-in'}))和方法调用(例如,document.querySelector('application-navigation').enableSignOut())与“顶级”JavaScript(例如,JavaScript MV* 用语中的“路由器”)进行通信。本质上,自定义事件和方法构成了元素的“公共 API”。
可以使用不同的 HTML 导入将自定义的 <application-navigation> 元素包含在应用程序中。例如,使用 <link rel="import" href="default/application-navigation.html"/> 或 <link rel="import" href="my_cool_theme/application-navigation.html"/>。只要 HTML 导入具有相同的方法并产生相同的自定义事件,应用程序的功能就应该相同,而不管使用的是什么用户界面自定义。
这种设计的主要好处是它通过允许非常可定制的用户界面来满足要求 - 内部 JavaScript 事件、CSS 和(影子)DOM 结构可以在模板之间完全不同。它还允许在适当的时候重用现有的库。例如,默认的<application-navigation> 元素可以使用来自 Twitter Bootstrap 的下拉 HTML 标记,而主题版本可以使用 Foundation 库。
但是,这个组件不是很通用。它实现了一个相当特定的目的(控制导航请求),不像<application-dropdown> 元素(尽管<application-navigation> 元素可以使用(可定制的)<application-dropdown> 元素)。
重述问题
我的问题是,应该创建自定义元素来实现特定目的、更通用目的,还是目的的广度无关紧要?
【问题讨论】:
标签: javascript css html web-component custom-element