成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Velocity.js —— 來(lái)自淘寶的 JS 模板引擎

開發(fā) 前端
Velocity.js 是velocity模板語(yǔ)法的javascript實(shí)現(xiàn)。Velocity 是基于Java的模板引擎,廣泛應(yīng)用在阿里集 體各個(gè)子公司。Velocity模板適用于大量模板使用的場(chǎng)景,支持復(fù)雜的邏輯運(yùn)算,包含 基本數(shù)據(jù)類型、變量賦值和函數(shù)等功能。Velocity.js 支持 Node.js 和瀏覽器環(huán)境。

注意

velocityjs在npm中包名從原來(lái)的velocity.js改為velocityjs,感覺require("velocity.js") 比較不好看,所以改名,從0.3.0之后的版本都在velocityjs下更新。

查看最新版本

  1. $ npm info velocityjs version 

Velocity.js 是velocity模板語(yǔ)法的javascript實(shí)現(xiàn)。Velocity 是基于Java的模板引擎,廣泛應(yīng)用在阿里集 體各個(gè)子公司。Velocity模板適用于大量模板使用的場(chǎng)景,支持復(fù)雜的邏輯運(yùn)算,包含 基本數(shù)據(jù)類型、變量賦值和函數(shù)等功能。Velocity.js 支持 Node.js 和瀏覽器環(huán)境。

最新版下載地址:https://github.com/shepherdwind/velocity.js/zipball/master

Features

  • 支持客戶端和服務(wù)器端使用

  • 語(yǔ)法是富邏輯的,構(gòu)成門微型的語(yǔ)言

  • 語(yǔ)法分析和模板渲染分離

  • 基本完全支持velocity語(yǔ)法

  • 瀏覽器使用支持模板之間相互引用,依據(jù)kissy模塊加載機(jī)制

  • 三個(gè)Helper,友好的數(shù)據(jù)模擬解決方案

  • Vim Syntax

Install

via npm:

 
  1. $ npm install velocityjs 

Broswer Support

兼容ie6+,chrome等其他瀏覽器,test case

點(diǎn)擊此處可以體驗(yàn)web 端velocity語(yǔ)法解析過(guò)程,注:使用ACE作為代碼編輯器,僅支持高級(jí)瀏覽器訪問(wèn)。

執(zhí)行cake命令進(jìn)行打包velocity.js瀏覽器端腳本:

 
  1. $ make parse  

需要cli下安裝coffeejs,暫時(shí)打包是為kissy所使用的,velocity.js需要的一些常用的 ecma5功能,比如foreach, some, isArray等,在node環(huán)境下是自帶的功能,而web端的兼 容是交給已有的類庫(kù)解決。需要自行提供一組跨瀏覽器的api,比如kissy打包:

 
  1. //api map  
  2. var utils = {  
  3.   forEach : S.each,  
  4.   some    : S.some,  
  5.   mixin   : S.mix,  
  6.   guid    : S.guid,  
  7.   isArray : S.isArray,  
  8.   indexOf : S.indexOf,  
  9.   keys    : S.keys,  
  10.   now     : S.now  
  11. };  

Velocity語(yǔ)法具有很高的容錯(cuò)能力,類似于html結(jié)構(gòu)的解析,同時(shí)語(yǔ)法規(guī)則復(fù)雜,所以語(yǔ)法 解釋器執(zhí)行性能可能比較慢,velocity.js把語(yǔ)法結(jié)構(gòu)分析運(yùn)算和語(yǔ)法執(zhí)行兩個(gè)過(guò)程獨(dú)立出來(lái), 第一步,語(yǔ)法結(jié)構(gòu)分析返回一個(gè)數(shù)組(語(yǔ)法樹),描述velocity語(yǔ)法,語(yǔ)法執(zhí)行使用數(shù)據(jù)和語(yǔ) 法樹,計(jì)算模板最終結(jié)果。

執(zhí)行build后,得到兩個(gè)文件,分別是build/velocity/下的index.jsparse.js,兩者 相互獨(dú)立,parse.js語(yǔ)法分析過(guò)程可以放在本地完成,執(zhí)行命令:

把語(yǔ)法分析和模板拼接分開,為了方便在本地編譯語(yǔ)法樹,減少在web端js運(yùn)算。本地編譯 模板的思路,源自KISSY的xtemplate

雖然語(yǔ)法解釋器可以在瀏覽器端執(zhí)行,但是,不推薦那么使用。

 
  1. #使用velocity命令行工具打包  
  2. veloctiy --build *.vm  
  3. veloctiy -b *.vm  

源碼中test/web/目錄的js,一部分就是線下編譯后的得到的,此處可直接訪問(wèn)。

Public API

node_module

 
  1. var Velocity = require('../src/velocity');  
  2.  
  3. //1. 直接解析  
  4. Velocity.render('string of velocity', context);  
  5.  
  6. //2. 使用Parser和Compile  
  7. var Parser = Velocity.Parser;  
  8. var Compile = Velocity.Compile;  
  9.  
  10. var asts = Parser.parse('string of velocity');  
  11. (new Compile(asts)).render(context);  

context

context是一個(gè)對(duì)象,可以為空,執(zhí)行中$foo.bar,訪問(wèn)路徑是context.foo.barcontext的屬性可以是函數(shù),和vm中定義保持一致。

On Broswer

1 . 使用線下打包方案:

 
  1. KISSY.use('velocity/index, web/directives'function(S, Velocity, asts){  
  2.   var compile = new Velocity(asts);  
  3.   S.all('body').html(compile.render());  
  4. });  

2 . 使用線上編譯:

 
  1. KISSY.use('velocity/index, velocity/parse'function(S, Velocity, Parser){  
  2.   var html = (S.all('#tpl').html());  
  3.   var asts = Parser.parse(html);  
  4.   var compile = new Velocity(asts);  
  5.   console.log(compile.render());  
  6. });  

兩者的區(qū)別在于asts的獲取,第一種方式,直接取asts,第二種,需要首先執(zhí)行語(yǔ)法分析過(guò) 程。

Syntax

具體語(yǔ)法請(qǐng)?jiān)L問(wèn)官網(wǎng)文檔:velocity user guide。

Directives

Directives支持set, foreach, if|else|elseif, macro, parse, break。不 支持有,stop, evaluate, define,感覺這些語(yǔ)法比較偏,用處不大,暫時(shí)沒(méi)有實(shí)現(xiàn)。 其中parse,在web端,使用kissy的模塊加載器加載,需要首先線下編譯打包,例子

macro

宏分為系統(tǒng)的宏,比如parse, include,和用戶自定義宏,通過(guò)#macro在vm中定義,此 外可以使用自定義的js函數(shù)替代在vm中定義。對(duì)于系統(tǒng)宏和自定義宏,不做區(qū)分,對(duì)于 #parse#include的調(diào)用,可以使用自定義函數(shù)來(lái)執(zhí)行。具體見issue #3

foreach

foreach在velocity中對(duì)對(duì)象的遍歷,和js有區(qū)別,java中對(duì)象是一個(gè)map,需要通過(guò)方法 keyset來(lái)獲取map中的key,foreach循環(huán)寫法等同于js的for in循環(huán),感覺有點(diǎn)怪異。在 一個(gè)foreach,有一個(gè)$foreach的對(duì)象可以使用,此變量作用域?yàn)楫?dāng)前循環(huán)范圍。

  1. #foreach($num in [1..5])  
  2.   index => $foreach.index   
  3.   count => $foreach.count  
  4.   #if (!$foreach.hasNext) end #end  
  5. #end  
  6. 結(jié)果:  
  7. index => 0  
  8. count => 1  
  9.  
  10. index => 1  
  11. count => 2  
  12. ...  
  13. index => 4  
  14. count => 5  
  15. end  

string

velocity中字符串求值和php類似,雙引號(hào)字符串里面的變量會(huì)被替換變量對(duì)應(yīng)的值,單引 號(hào)原樣返回,推薦盡量使用單引號(hào),那樣性能好一些。此外,雙引號(hào)中變量替換,沒(méi)有再次 調(diào)用語(yǔ)法分析器,而是使用正則,只支持簡(jiǎn)單的引用替換,比如"$varname1 $foo.bar", "$foo.bar[1] $foo.bar()"都不支持。如果需要完整支持字符串雙引號(hào),需要反復(fù)調(diào)用語(yǔ) 法分析器,考慮到性能,基本引用基本夠用了,vm本身支持強(qiáng)大的變量賦值,可以先賦值, 在放入字符串,或者使用加法進(jìn)行字符串拼接。

在java中可能大量使用雙引號(hào)方式,因?yàn)閖ava對(duì)象無(wú)法自動(dòng)轉(zhuǎn)換類型,雙引號(hào)做類型轉(zhuǎn)換用, 而在web端,js無(wú)此需要。

velocity

  1. Usage: velocity [options] [file ...]  
  2.  
  3. Options:  
  4.  
  5.   -h, --help         output usage information  
  6.   -V, --version      output the version number  
  7.   -b, --build        build .vm file to js ast module of kissy  
  8.  
  9. Example:  
  10.  
  11.   # parse vm file  
  12.   $ velocity a.vm   
  13.  
  14.   # parse vm file with json data  
  15.   $ velocity a.vm  a.json  
  16.  
  17.   # build asts module of kissy  
  18.   $ velocity *.vm  

Helper

Helper提供一些額外的功能,主要用于解決vm數(shù)據(jù)模擬問(wèn)題。

  • structure 獲取vm中所有變量的結(jié)構(gòu): $foo.bar => foo: {bar: 'string'}
  • backstep vm逆推,根據(jù)velocity文件和解析后的結(jié)果,計(jì)算數(shù)據(jù)結(jié)構(gòu)和內(nèi)容
  • jsonify 把vm轉(zhuǎn)換為json結(jié)構(gòu),去除其中的html標(biāo)簽,比如:

jsonify文檔issue #11

  1. hello world $foo.name.  
  2. =>  
  3. {foo: { name: $foo.name }}  

License

(The MIT License)

Copyright (c) 2012-2013 Eward Songeward.song@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

來(lái)自:https://github.com/shepherdwind/velocity.js

 

責(zé)任編輯:林師授 來(lái)源: 51cto
相關(guān)推薦

2013-08-20 18:50:46

JS模板引擎模塊化Web App

2021-02-01 08:36:19

JS引擎V8

2021-04-21 12:04:47

JS引擎流程

2016-08-02 10:22:10

JS微軟Node

2021-02-27 10:52:08

JS移動(dòng)端Hermes

2021-01-11 13:46:26

Spring BootThymeleafJava

2021-09-07 15:25:51

鴻蒙HarmonyOS應(yīng)用

2011-07-15 14:01:50

PHP模板引擎

2015-08-04 10:25:12

velocity

2016-11-14 15:51:42

JavaScriptAngular.jsReact.js

2012-06-07 16:16:43

JavaScript

2017-03-10 18:29:17

Androidfreemarker應(yīng)用

2011-10-22 11:32:42

Node.js

2020-06-02 14:00:53

Vue.js組件Web開發(fā)

2020-10-19 11:49:32

NodeJavaScript

2024-04-12 08:32:03

JSAI機(jī)器學(xué)習(xí)

2012-11-08 10:21:41

JSrequireJavaScript

2025-01-17 09:29:42

2022-02-08 18:09:20

JS引擎解析器

2017-01-04 15:22:57

TrimPath模板引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久天天 | 成人av网站在线观看 | 在线免费观看欧美 | 国产精品美女www | 国产一区91精品张津瑜 | 伊人伊人 | 亚洲精品一区二区 | 毛片网站在线观看视频 | 新超碰97 | 视频一区二区国产 | 91精品久久久 | 久久99精品久久久久久国产越南 | 精品久久久久久一区二区 | 亚洲一区 中文字幕 | 五月天天丁香婷婷在线中 | 婷婷不卡| 日一日操一操 | 日本国产一区二区 | 亚洲福利一区 | 成人免费在线视频 | 国产在线视频一区二区 | 亚洲国产成人精品久久久国产成人一区 | 国产精品欧美一区二区三区不卡 | 亚洲美女视频 | 精品视频国产 | 国产一级在线观看 | 亚洲一区二区三区在线视频 | 四虎影音 | 亚洲不卡一 | 欧美在线播放一区 | 97免费在线视频 | 国产精品国产三级国产aⅴ无密码 | 国产中文在线 | 中文字幕色站 | 精品国产一区二区国模嫣然 | 久久宗合色 | 欧美国产日韩精品 | 香蕉视频91| 国产精品日韩欧美一区二区三区 | 亚洲aⅴ一区二区 | 中文字幕成人av |