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>