Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加对custom tag非data-ui-前缀的attribtue解析支持 #488

Open
Exodia opened this issue Jun 27, 2015 · 8 comments
Open

增加对custom tag非data-ui-前缀的attribtue解析支持 #488

Exodia opened this issue Jun 27, 2015 · 8 comments

Comments

@Exodia
Copy link

Exodia commented Jun 27, 2015

用 custom tag 意味着这个标签有区别于标准 html 标签的含义,自然也不需要 data-ui 前缀来和 html 标准属性区分了,同时也能够让整个标签的书写更加简化和利于阅读。

为了向后兼容,可以保留对 custom tag,data-ui-*的支持,同时增加非 data-ui 前缀的解析。

两者并存时,个人觉得以非 data-ui前缀的属性为准,主要是觉得 data-有自定义数据的语义存在。

@otakustay
Copy link
Member

这样的话我们得有一个名单来过滤一些元素通用的属性,比如id就是最典型的不能读的,肯定不能把dom的id当成控件的id来用

另外可能还有lang之类的,得整理一下?

@Justineo
Copy link
Member

Justineo commented Jul 2, 2015

Global Attributes:

Global

  • accesskey
  • class
  • contenteditable
  • dir
  • hidden
  • id
  • lang
  • spellcheck
  • style
  • tabindex
  • title
  • translate

ARIA

  • role
  • aria-*

Event handlers

  • onabort
  • onblur
  • oncancel
  • oncanplay
  • oncanplaythrough
  • onchange
  • onclick
  • oncuechange
  • ondblclick
  • ondurationchange
  • onemptied
  • onended
  • onerror
  • onfocus
  • oninput
  • oninvalid
  • onkeydown
  • onkeypress
  • onkeyup
  • onload
  • onloadeddata
  • onloadedmetadata
  • onloadstart
  • onmousedown
  • onmouseenter
  • onmouseleave
  • onmousemove
  • onmouseout
  • onmouseover
  • onmouseup
  • onmousewheel
  • onpause
  • onplay
  • onplaying
  • onprogress
  • onratechange
  • onreset
  • onresize
  • onscroll
  • onseeked
  • onseeking
  • onselect
  • onshow
  • onstalled
  • onsubmit
  • onsuspend
  • ontimeupdate
  • ontoggle
  • onvolumechange
  • onwaiting

事件相关属性或许也可以简单当成 on* 来处理吧。

@otakustay
Copy link
Member

看上去除了事件以外,langidclasshiddentitlerole这几个是容易和控件的逻辑冲突的

@Exodia 对于这些属性我们怎么搞,忽略之并且允许data-ui-前缀的对应属性?

@Exodia
Copy link
Author

Exodia commented Jul 4, 2015

polymer 是在定义控件类的时候,有个白名单属性去控制要解析标签上的哪些属性名,但我们的控件体系一开始不是这样设计的,用白名单的方式修改范围和影响面太大;

我觉得可以在Control 上增加一个静态属性或者方法(excludeParseAtrributes),返回要排除的解析属性,其余控件可以根据自己的需求覆盖。

解析流程:

  1. 找到控件的构造函数,设置排除属性表excludeTables为控件构造函数的excludeParseAtrributes,若控件构造函数不带excludeParseAtrributes,则设置为 Control 的excludeParseAtrributes。
  2. 将exclueTables设置的属性从 html attributes 中排除后,剩余的 attributes 作为控件的 options参数。

@otakustay
Copy link
Member

我觉得可以在Control 上增加一个静态属性或者方法

我理解不是静态的,放在原型上覆盖方便多了

然后还要考虑给扩展用的特别剔除,这个依旧是以extension-为前缀喽?

@Exodia
Copy link
Author

Exodia commented Jul 4, 2015

我理解不是静态的,放在原型上覆盖方便多了

一开始我也这么想,但是我们是先解析 html attribute,然后调用控件构造函数,传入解析后的属性,作为原型方法在未实例化控件前,也无法自动完成向上寻找,所以还不如作为静态方法,从语义上来说,也是控件类层次的东西,而不是实例上的?

@Exodia
Copy link
Author

Exodia commented Jul 4, 2015

或者你的意思是,在 initOptions 前增加一个 parseOption?

@otakustay
Copy link
Member

好像如你所说放在原型上确实有些问题,不过不在原型上就没办法继承,只能选择控件自己的和一个默认的实现

如果这样,我建议默认实现放在main上就好了,main更容易重写甚至整个替换,而Control作为参与继承链的一部分很能替换

另外一个办法,就是改控件构造函数,传一个htmlAttributes进去,不过这个变化太大,不推荐

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants