Node.js開發劄記之二·頁面篇

來源:互聯網
上載者:User

標籤:node.js   handlebar   邏輯運算式   


前言:

原本糾結於Web 模板,選了Handlebars。後來發現頁面都是弱邏輯的,不支援複雜邏輯運算式。幾乎要放棄之際,想起了Javascript中eval函數。雖然eval函數很強大,強大到可以“憑空”產生對象或執行代碼,但總覺得他破壞了代碼的優雅性。加之"eval"和"evil"(邪惡)長得挺像的。Eval函數的印象不太好,大多數時候將其當做"禁手"。這時候反正也沒有什麼好辦法了。通過Handlebars自訂函數使用eval執行想要的邏輯。以拼接字元的模式來進行邏輯判斷理論上可以如同EL運算式一樣處理頁面上的大部分邏輯。好像效果還不錯哦。

案例:

安裝handlebars 

npm install handlebars 

還是在我們之前的express項目裡。建兩個檔案。

模板:test_expression.html

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body>{{#expression '(' x.a'==' 3 '||' x.a'>' 4 ')&&' x.b'>' 1}}green{{else}}red{{/expression}}</body></html>

js代碼:test_expression.js

var fs = require('fs');var hbs = require('handlebars');//主要思想是使用eval執行想要的邏輯。以拼接字元的模式來進行邏輯判斷理論上可以如同EL運算式一樣處理頁面上的大部分邏輯。如:{{#expression a '==' b '&&' c '>' 0}}hbs.registerHelper('expression', function() {    var exps = []; try{ //最後一個參數作為展示內容,也就是平時的options。不作為邏輯運算式部分 var arg_len = arguments.length;var len = arg_len-1;for(var j = 0;j<len;j++){exps.push(arguments[j]);}var result = eval(exps.join(' '));if (result) {  return arguments[len].fn(this);} else {  return arguments[len].inverse(this);} }catch(e){ throw new Error('Handlerbars Helper "expression" can not deal with wrong expression:'+exps.join(' ')+"."); } });     var template = hbs.compile(fs.readFileSync('../templates/test_expression.html').toString());var http =require("http");http.createServer(function(request,response) {   var conditions = {x:{a:4,b:2}};   var html = template(conditions);   response.writeHead(200, {          "Content-Type":"text/html",          "charset":"UTF-8"   });   response.write(html);   response.end();}).listen(3000);

運行CMD命令列模式下進入node.express\test目錄下執行node test_expression.js


可以改變var conditions = {x:{a:4,b:2}}來驗證邏輯運算式。

總結:

萬分感謝能看到這裡的童鞋。上面的內容其實就是一些基本的套頁面流程。著重點在於handlebar的自訂helper功能和解決頁面弱邏輯。個人支援handlebar作者提出的頁面弱邏輯觀點。但是覺得至少得支援下邏輯運算式。否則一個頁面寫一堆if else或其他邏輯運算式衍生代碼,太累人了。一度想要放棄這塊。直到寫出expression標籤,發現前面又有路了。預知後事如何,且聽下回分解。

Node.js開發劄記之二·頁面篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.