使用handlebars.js來處理json template

使用json資料後的套版問題

我相信很多人在取得json資料後會用Jquery處理套版的問題:

$.ajax({ ... .done(function(data) { var context = $("<ul></ul>");     $.each(data, function(i, v){       content.append(‘<li>‘ + v + ‘</li>‘); ... }); }); });

數量上面少還好,如果是很複雜的template,這樣寫會變得超級難維護。這時候JS template系統就會發揮作用了。

選擇有很多種,有Mustache, Handlebars與Jquery Templating

這裡只介紹Handlebars,因為功能比Mustache多一些,語法又比Jquery Templating 精簡一些。在套入Rails時,更可以將templates獨立出來在一個目錄裡面,不然東西都寫在html裡真的亂糟糟又難管理。

  1. 安裝handlebars assets, 依照指示在Gemfile中,然後在欲載入之js中用require的方式載入,這邊使用 //= require handlebars.runtime
  2. 設定template目錄並且require到欲載入的js檔。依照說明檔在app/assets/javascripts中建立templates目錄,然後在templates中建立相對應的資料夾,通常以會用到的model或controller命名。
  3. handlebars用法參考官方網站
  4. 建立template檔案。注意需要以.hbs(代表handlebars)為檔案結尾。內容範例如下:

`\

{{#each feeds}} <table width="100%" class="feed_container"> <tr> <td> <span class="handle fa fa-arrows-v"></span> #{{index}} {{from}} 於 {{created_at}} 分享 <a class="feed_remove" href="#"><i class="fa fa-trash-o"></i>移除</a> </td> </tr> <tr> <td><img src="{{image}}" ></td> </tr> <tr> <td> <a href="{{link}}" target="_blank">連結</a> </td> </tr> <tr> <td> {{title}} - {{from_web}} </td> </tr> <tr class="border_bottom"> <td>{{description}}</td> </tr> </table> {{/each}}

`\

  1. 由上列程式可以看到放在template檔中的資料是可以不用放在script tag的,真的很方便,而且可以獨立維護。
  2. 既然不使用script tag的方式,那麼指定與載入template的方法就變成gem說明的那樣: HandlebarsTemplates[‘contacts/new‘];中括號裡面的是templates目錄的路徑與檔案。需要注意的是如果templates資料夾裡面沒有任何.hbs檔案,那麼HandlebarsTemplates便會無法建立。
  3. 參考以下範例,以ajax取得json的方式:

`\

  $.ajax("/get_json", {     type: "POST",     data: $("form:first").serialize(),     success: function(data) { var renderer = HandlebarsTemplates[‘somemodel/new‘]; var result = renderer(data);       $("#container").html(result); }

`\

這樣就不用把templates寫到js裡面了。

时间: 2024-10-30 15:12:05

使用handlebars.js來處理json template的相关文章

使用nbrbutil工具來處理requested media id is in use, cannot process request

首先我發現一個Media已經過期很久,但是并不會覆蓋重用 使用bpexpdate手動過期,失敗,讓他deassigned也不行 使用bpimmedia查看上面的image也沒有 我嘗試手動去過期,返回in use的信息.嘗試前面一篇帖子http://www.cnblogs.com/guilingyang/p/5585179.html的做法,也不能成功.最後找到了nbrbutil工具來解決 [[email protected] admincmd]# bpexpdate -m DD1083 -d 0

sort、join 處理 csv 檔案

雖然理想上,使用者要的資料最好都是由系統產生報表,使用者直接瀏覽或下載,但是,使用者常臨時要一些業績或管理性報表,IT 人員也只能從資料庫中下 sql statement 後匯出給使用者,有時,IT 人員更可能拿到別家公司匯出的數個 csv 檔,使用者卻希望將它們合併成一個檔案,當然,一般情況 IT 人員應該會找到一台資料庫,把檔案匯入處理後,再匯出給使用者,不過,IT 人員的環境裡並不總是有資料庫可以使用 (可能是控管嚴格沒有權限) ,這時候可以使用 Unix 中的一些指令來處理,Unix 通

【香港記事】 路不拾遺與失物處理

https://hk.news.appledaily.com/local/daily/article/20170123/19906005 最近我也遇到跟新聞主題類似的情況,不過我的處理手法跟她不一樣,我也說說我的經過吧,希望對旅遊的你來說,有一點點幫助吧! 我在某個地方拾貨一個文件皮包,裡面有個人證件(身份證.回鄉證.八達通.深圳通等),我並沒有第一時間撥打999電話,讓警察前來處理,因為有可能不知道等多久,而是直接將皮包交給了我附近的警局,并進行了登記. PS:如果3個月內這件失物沒人認領,這

使用google API之前需要對input 做什麼 安全性的處理?

我正要使用node.js 和 google map api做一个小应用,Google MAP API的使用URL如下: https://maps.googleapis.com/maps/api/place/textsearch/json?query=KEY+WORDS&key=YOUR_API_KEY KEY WORDS的部分将是我在我的应用上id="keywords"这个input的value HTML CODE: <form action="/api/goo

handlebars.js模版引擎随记

前台的模版引擎有许多种,相比较而言 我个人更觉得handlebars更为轻便 首先github上下载自新版本的handelbars.js http://handlebarsjs.com 下载下来之后呢 我们需要在页面引入js 1 <script type="text/javascript" src="script/jquery.js"></script> 2 <script type="text/javascript"

NIO.2: 目錄的處理

檔案系統的 I/O,除了前幾篇所說明的檔案相關處理外,另一個主題就是目錄的處理 - 讀取.走訪.過濾檔案等,說明如下: 取得根目錄 1 package idv.steven.nio2.filedir; 2 3 import static java.lang.System.out; 4 import java.nio.file.FileSystems; 5 import java.nio.file.Path; 6 import java.util.ArrayList; 7 8 public cla

在 Windows 上遇到非常多 TIME_WAIT 連線時應如何處理

我們公司所代管的網站裡,有幾個流量是非常大的,在尖峰的時刻同時上線人數可能高達數千到數萬人,而在這個時候如果使用 netstat 或 TCPView 查看所有 TCP 連線時就會看到非常多處於 TIME_WAIT 狀態的連線,平時就會多達數千條 TIME_WAIT 連線之多,尖峰的時候還有一萬多條 TIME_WAIT 連線的狀況,雖然這些連線目前還不致於造成連線發生問題,但基於一股好奇心才決定研究到底查探個究竟,深入研究後才得知這問題現在不處理,等網站流量在大一些的時候那就會出亂子了! 以下是用

js模版引擎handlebars.js实用教程

一.为什么选择Handlebars.js 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是:根据页面需要的信息,构造出一个实体,这个实体中包含了界面需要的所有属性,通常这个实体是由N个表中的字段构成的,俗称vo.由于vo的属性可以是String.List.Map等等等,又可以vo套vo,因此这种方式非常灵活,也非常好用. 在后台对vo进行赋值,通过strut

C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLTXvXJlIqeavUo1Ak%3D&b=6 如果要在 C++ 裡對特定的檔案做存取,其實透過 STL 的 fstream(參考)來做,一般是不會有什麼問題的:相對的,問題比較大的部分,可能會是在於對於資料夾(folder.directory)的處理,以及對於路徑的操作上.像是以路徑來說,Windo