This repository has been archived on 2023-08-29. You can view files and clone it, but cannot push or open issues/pull-requests.
yutent
/
anot.js
Archived
1
0
Fork 0

优化attr指令;增加事件绑定的简写

master 2.1.0
宇天 2019-07-20 15:50:47 +08:00
parent d2e32f4067
commit ab03d4a35a
3 changed files with 20 additions and 8 deletions

View File

@ -1,6 +1,6 @@
{
"name": "anot",
"version": "2.0.0",
"version": "2.1.0",
"description": "Anot - 迷你mvvm框架",
"main": "dist/anot.js",
"files": ["dist"],

View File

@ -56,7 +56,7 @@ var events = oneObject(
'animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit'
)
var obsoleteAttrs = oneObject(
'value,title,alt,checked,selected,disabled,readonly,enabled,href,src'
'value,title,alt,checked,selected,disabled,readonly,loading,enabled,href,src'
)
function bindingSorter(a, b) {
return a.priority - b.priority
@ -85,8 +85,12 @@ function scanAttr(elem, vmodels, match) {
var param = match[2] || ''
var eparam = match[3] || '' // 事件绑定的简写
var value = attr.value
if (events[type] || events[eparam]) {
param = type || eparam
if (obsoleteAttrs[type]) {
param = type
type = 'attr'
}
if (eparam) {
param = eparam
type = 'on'
}
if (directives[type]) {

View File

@ -86,22 +86,30 @@ var attrDir = Anot.directive('attr', {
if (i === 'href' || i === 'src') {
elem[i] = obj[i]
} else {
// 修正这些值的显示
if (obj[i] === false || obj[i] === null || obj[i] === undefined) {
obj[i] = ''
}
if (typeof elem[boolMap[i]] === 'boolean') {
if (
typeof elem[i] === 'boolean' ||
typeof elem[boolMap[i]] === 'boolean'
) {
var k = i
if (boolMap[i] && k !== boolMap[i]) {
k = boolMap[i]
}
//布尔属性必须使用el.xxx = true|false方式设值
obj[i] = !!obj[i]
elem[boolMap[i]] = obj[i]
elem[k] = obj[i]
if (!obj[i]) {
elem.removeAttribute(boolMap[i])
elem.removeAttribute(k)
continue
}
}
//SVG只能使用setAttribute(xxx, yyy), VML只能使用elem.xxx = yyy ,HTML的固有属性必须elem.xxx = yyy
//SVG只能使用setAttribute(xxx, yyy), HTML的固有属性必须elem.xxx = yyy
var isInnate = rsvg.test(elem) ? false : i in elem.cloneNode(false)
if (isInnate) {
elem[i] = obj[i]