cssmagic / action

Easy and lazy solution for click-event-binding.
95 stars 32 forks source link

fix data(action) to attr(data-action) #30

Closed lyt9304 closed 8 years ago

lyt9304 commented 8 years ago

将data("action")变成attr("data-action"),防止由于data调用和attr调用混合导致的jquery缓存池存取值不一。

cssmagic commented 8 years ago

谢谢发现并修复此问题。经过这个修改,Action 对 jQuery 的兼容性更好了。

这个问题的具体解释是这样的:

jQuery 的 .data() API 是基于自己的数据 store 的,因为这个 API 要远远早于 HTML 自定义属性(Dataset)规范的诞生。但由于这两者的功能类似,从某个版本开始,jQuery 也会兼顾元素的 HTML 标签内的 data-* 属性。不过,jQuery 只会在第一次用 .data() 读取某键值时会看元素身上同名的 HTML 自定义属性(并把读取结果写入自己的数据 store),此后对该键的读取都是走它自己的数据 store 的。另外,jQuery 用 .data() 写数据的操作则是一直跟 HTML 属性完全无关的。

这种行为反映到 Action 身上,就是在用 .data() 取了一次 action 名后,不论元素的 data-action 属性改成什么,再次用 .data() 取到的 action 名仍将是第一次取到的结果。

因此,对 jQuery 用户(以及 Action 的内部实现)来说,要修改或读取某个元素身上的 action 名,应该总是使用 .attr() 这个 API 来处理。

cssmagic commented 8 years ago

最好再补充个单元测试。 :smile: