avalonJS-ソース読み取り(二)
11217 ワード
avalon 。 avalon DOM avalon 。
[-]
avalon (2)
avalon
parseExpr
parseExprProxy
createCache
demo
avalon (2)
avalon 。 avalon DOM avalon 。
js 。
//attr bindings
// <div ms-dbclick-_abc='func'></div>
{
type:$string,// ms-... , ms-duplex type:duplex, , (event) click,mousemove type:on
param:$string//"_abc"
element:$node//
name:$string//ms-dbclick-_abc
value:$string//func
priority:$Num// 。
//"if": 10,
//"repeat": 90,
//"widget": 110,
//"each": 1400,
//"with": 1500,
//"duplex": 2000,
//"on": 3000
//
}
//text bindings
{
type: "text|html",//
node: node,// element
nodeType: 3,//
value: token.value,
filters: token.filters
replaceNodes:$array//[node]
//token scanExpr
}
//text token
{
value:$string//
expr:$boolean// {{...}}
filters:$array|void 0 //
}
//bindingHandlers data
{
handlerName:$name// bindingHandlers 。 href src attr , bindings type
evaluator:$func// parseExpr 。
...// text bindings attr bindings
}
avalon
, 。 bindingHandlers 。bindingHandler avalon , javascript UI
。 parseExprProxy parseExpr。
parseExpr
parseExpr ms-what、{{what}}、vmodule filters Function, evaluator ( bindingHandlers data )。
function 。
// ms-href={{name}}
function anonymous(vm1399087422863_0/**/) {
'use strict';
var name = vm1399087422863_0.name
return name;
}
// filter , {{name | uppercase}}
function anonymous(vm1399088892713_0,filters1399088892713/**/) {//filters1399088892713 filters key/value
'use strict';
var name = vm1399088892713_0.name
var ret1399088892713 = name
if(filters1399088892713.uppercase){
try{
ret1399088892713 = filters1399088892713.uppercase(ret1399088892713)
}catch(e){}
}
return ret1399088892713
}
//ms-duplex='name'
function anonymous(vm1399091173121_0/**/) {
'use strict';
return function(vvv){
var name = vm1399091173121_0.name;
if(!arguments.length){
return name
}
vm1399091173121_0.name= vvv;
}
}
//ms-on ms-click="click"
function anonymous(vm1399093434491_0/**/) {
'use strict';
var click = vm1399093434491_0.click
if(avalon.openComputedCollect) return ;
return click;
}
( function function ) , , function
, avalon 。parseExpr function uniId 。
demo 。
parseExprProxy
parseExprProxy parseExpr function, dom 。 parseExpr ms-href='http://{{abc}}ff{{abd}}' 。 dom ,
。
createCache
createCache: , 。
function createCache(maxLength) {
var keys = []
function cache(key, value) {
if (keys.push(key) > maxLength) {
delete cache[keys.shift()]
}
return cache[key] = value;
}
return cache;
}
var c= createCache(256);
//c("key","value")//value
//c("key")//value
,avalon DOM ms-, {{...}} parseExpr , bindingHandlers , javascript UI , ( ,
), 。
demo
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="avalon.js"></script>
</head>
<body>
<div ms-controller="nihao">
<a ms-href='{{name}}'>abc</a>
{{name|uppercase}}
<input type='text' ms-duplex='name'/>
<button ms-click='click'>button</button>
<a ms-href='http://abc/{{name}}'>test parseExprProxy</a>
</div>
<script>
avalon.define("nihao", function(vm) {
vm.name='nihao'
vm.cla=true
vm.click=function(){
console.log("click!");
return
}
})
</script>
</body>
</html>