Markaby:惡趣味的逆襲
不是說你很邪惡,而只是因為有時候作壞事本身就是一件很有趣的事情。像是蹺課出去打撞球,像是上班偷懶,像是捉弄朋友....等等雖然明知道本身是不對的事情,但是依舊無法抗拒這種快感。第一次看到 Markaby,心中的 OS 是「妖孽呀,這是網頁設計的邪道呀」。但是最近有機會碰到高手寫的 Markaby code ,頓時發覺有點沈溺其中無法自拔(果然是邪道,才會有毒品的快感)。或許這又是一個明知不對,但是又令人忍不住去碰的小誘惑。
敝人小弟在下我曾經寫過HTML?New Template System ?,裡面有提到
Ruby 統一全世界當然是一個美好的夢想,畢竟我是100%原汁的 Ruby 派。但是當你在商業應用上,版面設計通常交給美工,他們只需要會 Dreamweaver 之類的東西因為考慮到美工人員不太會去管程式,程式也沒這個 sense 去碰美工,所以所謂的 template 正道,就是「美工歸美工,程式歸程式」。基本要求是 HTML 版面跟 Rails 程式分開,美工好做事,程式也好修改。這時候,難道你要教美工 Ruby 程式設計?所以,除非 Dreamweaver 或是 Frontpage 支援 Ruby @@!,不然大家還是先把 HTML 當成網頁程式設計的最大公約數好了。
但是 Markaby 就是一個相當詭異的存在,他是一個使用 Ruby Code 來撰寫 html 的方式。他是一個 Rails Plugin ,安裝方式是
script/plugin install http://code.whytheluckystiff.net/svn/markaby/trunkrhtml 跟 markaby 是可以兩者並行的,請先將你的 markaby file 都從 .rhtml 改成 .mab 的名字,這樣 rails 就可以知道這是 markaby 的檔案了。
撰寫範例是這樣
h1 'Listing products'裡面有很多 html tag 跟 Ruby code,Rails helper。裡面看不到煩人的 <% %> 等符號,只有讓人興奮的 Ruby code。
table.editor.classic do
tr do
for column in Product.content_columns
th column.human_name
end
end
for product in @products
tr do
for column in Product.content_columns
td product.send(column.name)
end
td { link_to 'Show', :action => 'show', :id => product }
td { link_to 'Edit', :action => 'edit', :id => product }
td { link_to 'Destroy', { :action => 'destroy', :id => product }, :confirm => 'Are you sure?' }
end
end
end
link_to 'Previous page', { :page => @product_pages.current.previous } if @product_pages.current.previous
link_to 'Next page', { :page => @product_pages.current.next } if @product_pages.current.next
br
link_to 'New product', :action => 'new'
好處呢?
就是一個爽字形容,還有另外一種自己已經成為高手的錯覺。
壞處呢?
你沒辦法用美工改好給你的 HTML code ,你必須要求美工使用 CSS 來做所有排版的工作,不然合作起來也非常累。另外一個壞處是,交接的時候交接的人會很不高興,這是哪門子的版面 code ,要我怎麼看呀。
該不該用呢?
就實際面來說,沒有任何實用價值。但是你也知道,有些東西你明知道是錯的,但是還是會去做,只是因為他很爽。所以夜深人靜的某個夜晚,我依舊偷偷使用 Markaby 來寫我的某個小網頁 :p