摘要:由于某些原因,我們產(chǎn)品需要改為在后端渲染,再發(fā)送到前端,但早已經(jīng)適應(yīng)的我根本不能忍受后端各種弱爆了的模板。本身的語法可謂相當(dāng)靈活,還有強大的擴展功能,他可以渲染等任何格式的文本文件,還支持模塊化,條件判斷,流輸出等其它特性。
Dust一個適用于瀏覽器與node的異步模板框架。
先上實例后端模板:
{@inject api="http://api.myserver.com/get_message"}留言: {count}條
{#messages}{.}
{/messages} {/inject}
http://api.myserver.com/get_message 返回結(jié)果:
{ count: 3, messages: ["我勒個去", "好強大啊", "受不了了"] }
渲染結(jié)果:
Dust的特性留言: 3條
我勒個去
好強大啊
受不了了
所有用過Angularjs的同學(xué),一定不會忘記它強大的模板、數(shù)據(jù)綁定等功能,而這些在后端往往都是可盼而不可求的。由于某些原因,我們產(chǎn)品需要改為在后端渲染html,再發(fā)送到前端,但早已經(jīng)適應(yīng)Angularjs的我根本不能忍受后端各種弱爆了的模板。類似如jade這些都只能等你把數(shù)據(jù)全部準(zhǔn)備好之后才能工作,如果遇到復(fù)雜點的pjax頁面當(dāng)時就傻逼了。而我需要的是類似Angularjs的那種,只用把依賴關(guān)系和數(shù)據(jù)位置都寫清,然后從數(shù)據(jù)請求到發(fā)送到客戶端折=這一些列流程它自己跑起來的那種模板。
就在前幾天,我突然腦洞大開的在google上搜索了“async node template”,居然搜索到了Dust這貨。 其主頁第一句介紹的話就是:
Asynchronous templates for the browser and node.js
而且這個項目又是有 LinkedIn 在背后做支持,當(dāng)時感覺就是碉堡了。他的項目主頁在 http://linkedin.github.io/dustjs/
那么現(xiàn)在回到最上面的模板代碼,這段代碼的作用是 請求遠程服務(wù)器的get_message鏈接,再將服務(wù)器返回的數(shù)據(jù)注入到模板中。如果你采用類似淘寶那種架構(gòu)的話(node只負責(zé)渲染頁面),那么這個就很好用,開發(fā)者就不用再管理鏈接請求啊,維持依賴啊等等這些瑣碎的事了。
Dust本身的語法可謂相當(dāng)靈活,還有強大的擴展功能,他可以渲染html、xml等任何格式的文本文件,還支持模塊化、partial,條件判斷,流輸出等其它特性。
源碼上面例子中的@inject就是我自己寫的dust擴展。源碼如下:
function requestAPI(url,cb){ //請求url,并將結(jié)果返回,cb 的格式為 function(err,result) }; dust.helpers.inject = function(chunk, context, bodies, params) { var api=params.api; if(api){ return chunk.map(function(chunk){ requestAPI(api,function(err,result){ if(err&&bodies["else"]){ chunk.render(bodies["else"],context.push({error:err})); }else if(bodies.block){ chunk.render(bodies.block,context.push(result)); } chunk.end(); }); }) }else{ return chunk.render(bodies.block,context); } }
剛才的模板還可以加入else模塊,用來捕捉錯誤:
{@inject api="http://api.myserver.com/get_message"}留言: {count}條
{#messages}{.}
{/messages} {:else} You got an Error: {error} {/inject}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/49529.html
摘要:使用粒子發(fā)射器方法會產(chǎn)生一次粒子爆發(fā),但通常你必須產(chǎn)生連續(xù)的粒子流。發(fā)射器具有和方法,可讓打開和關(guān)閉粒子流,并可以定義粒子的創(chuàng)建間隔。 你如何創(chuàng)造火,煙,魔法和爆炸等效果?你制作了許多小精靈,幾十,幾百,甚至上千個精靈。然后對這些精靈應(yīng)用一些物理效果,使它們的行為類似于你嘗試模擬的元素。你還必須給他們一些關(guān)于它們應(yīng)該如何出現(xiàn)和消失以及應(yīng)該形成什么樣的模式的規(guī)則。這些微小的精靈被稱為粒子...
摘要:大家都知道是另一家遷移到平臺的大型公司,的這篇博文解釋了為什么從遷移出來的原因開發(fā)效率提高一倍個人用更少的時間干了個人的活,性能提高一倍,代碼量減少文件減少。性能性能是一個非常有意思和具有爭議性的話題。對于來說這是一個另人激動的時刻。 大家都知道 PayPal 是另一家遷移到 Node.js 平臺的大型公司,Jeff Harrell 的這篇博文 Node.js at PayPal 解釋...
摘要:需要注意的一點是,面板下的功能,是對于細節(jié)中的細節(jié)進行的優(yōu)化。我們可以很清晰明了得分析按照活動,目錄,域,子域,和進行分組的前端性能。個人理解的話,前者類似事件冒泡,后者類似事件捕獲。同學(xué)在點我達,他們正在籌劃改組成大前端團隊。 對Chrome控制臺有一定的了解的朋友都在知道,Network面板會包括很多網(wǎng)絡(luò)請求方面的東西,包括Http相關(guān)的Request信息,Response信息...
詳見Githubhttps://github.com/lichking24... Thanos Dust Effect Effects Demo As Thanos making a snap with the Infinite Gauntlet, half the heros vanish to dust. As using the time stone, people come back. D...
詳見Githubhttps://github.com/lichking24... Thanos Dust Effect Effects Demo As Thanos making a snap with the Infinite Gauntlet, half the heros vanish to dust. As using the time stone, people come back. D...
閱讀 3860·2021-09-06 15:00
閱讀 2187·2019-08-30 15:53
閱讀 3293·2019-08-23 16:44
閱讀 953·2019-08-23 15:19
閱讀 1406·2019-08-23 12:27
閱讀 4204·2019-08-23 11:30
閱讀 600·2019-08-23 10:33
閱讀 378·2019-08-22 16:05