Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Ruby Templating Engines:ERB, HAML &Slim

ERB เป็นเครื่องมือสร้างเทมเพลต

เครื่องมือสร้างเทมเพลตช่วยให้คุณ ผสม HTML และ Ruby เพื่อให้คุณสามารถสร้างหน้าเว็บโดยใช้ข้อมูลจากฐานข้อมูลของคุณ

ERB เป็นเครื่องมือเริ่มต้นของ Rails สำหรับการแสดงมุมมอง

หมายเหตุ:Rails ใช้การนำไปใช้ที่เรียกว่า erubi แทน ERB จากไลบรารีมาตรฐาน Ruby

คุณจะได้เรียนรู้ในภายหลังในบทความนี้ คุณไม่จำเป็นต้องมี Rails เพื่อใช้ ERB

แต่ก่อน :

ข้อมูลเบื้องต้นเกี่ยวกับไวยากรณ์ของ ERB วิธีใช้ ERB ในโครงการ Ruby ของคุณและวิธีเปรียบเทียบกับเอ็นจิ้นการสร้างเทมเพลตอื่นๆ เช่น HAML

มาทำสิ่งนี้กันเถอะ!

การสอนทับทิมฝังตัว (ERB)

เทมเพลต ERB เป็นไฟล์ที่ลงท้ายด้วย .html.erb หรือ .erb ส่วนขยาย

ทุกสิ่งที่คุณเขียนในเทมเพลต ERB จะเป็น HTML

เว้นแต่… คุณใช้แท็กพิเศษ!

นี่คือตัวอย่าง :

Hello <%= name %>!

<%= %> . นี้ แท็กจะถูกแทนที่ด้วยเอ็นจิ้นการสร้างเทมเพลตโดยการประเมินโค้ด Ruby ที่อยู่ภายใน

มันเหมือนกับการแก้ไขสตริง!

สังเกตเครื่องหมายเท่ากับ <%= %> .

ที่บอกให้ ERB แสดงเนื้อหาของแท็กนี้ .

หากคุณต้องการเขียนคำสั่งวนซ้ำหรือ if ใน ERB คุณต้องการตัดเครื่องหมายเท่ากับออกเพื่อไม่ให้ ERB แสดงผลสิ่งที่คุณไม่ต้องการ

คุณอาจได้รับข้อผิดพลาดหากไม่ได้ใช้แท็ก ERB ที่ถูกต้อง

นี่คือตัวอย่าง :

<% if @favorite_food == "chocolate" %>
  Are you a chocolate lover? Here are some of our best PREMIUM chocolate bars!
<% else %>
  Here are our top 10 snacks that people bought this month.
<% end %>

นี่คือ ERB if statement เช่นเดียวกับคำสั่ง Ruby if ปกติ แต่ล้อมรอบไวยากรณ์เทมเพลตพิเศษเพื่อให้สามารถประเมิน &แทนที่ด้วยผลลัพธ์เมื่อแสดงผลหน้านี้สำหรับผู้ใช้

นี่คือการวนรอบ ERB :

<% @books.each do |book| %>
  <%= book.title %>
  <%= book.author %>
  
<% end %>

เมื่อมีหนังสือหลายเล่ม ระบบจะพิมพ์หนังสือทุกเล่มโดยมีตัวแบ่งบรรทัดระหว่างหนังสือ

หากคุณใช้ Rails เทมเพลตนี้จะแสดงเทมเพลตนี้ให้คุณทราบเมื่อคุณเรียกใช้การดำเนินการควบคุมที่เกี่ยวข้อง

การใช้ ERB โดยไม่มี Rails

หากคุณต้องการใช้ ERB นอก Rails เพื่อสร้างรายงาน &เว็บไซต์แบบคงที่…

คุณทำได้ :

require 'erb'

Book     = Struct.new(:title, :author)
template = ERB.new(File.read('template.erb'))

template.result_with_hash(books: [Book.new("test"), Book.new("abc")])

คุณจะต้องเปลี่ยน @books กับ books ในเทมเพลตของคุณเพื่อให้ใช้งานได้

Rails ใช้เคล็ดลับ metaprogramming ที่เรียกว่า “Variable Binding”

นั่นเป็นวิธีที่ Rails แชร์ตัวแปรอินสแตนซ์จากคอนโทรลเลอร์ของคุณกับเทมเพลตของคุณ แต่ถ้าคุณจะใช้ ERB โดยไม่มี Rails โดยใช้แฮช (พร้อม result_with_hash วิธี) เป็นวิธีที่สะอาดกว่า

คุณคิดอย่างไร?

การเปรียบเทียบเครื่องมือสร้างแม่แบบ

ตอนนี้ :

มาเปรียบเทียบเครื่องมือสร้างเทมเพลตต่างๆ กัน

คุณสามารถเข้าถึงเอ็นจิ้นเหล่านี้ทั้งหมดได้โดยใช้ Tilt gem Tilt เป็นอัญมณีอะแดปเตอร์เช่น Faraday

ตัวอย่าง :

require 'tilt'
Tilt::ErubiTemplate.new("test.erb").render

require 'tilt/haml'
Tilt::HamlTemplate.new("test.haml").render

require 'slim'
Slim::Template.new("test.slim").render

นี่คือเกณฑ์มาตรฐานระหว่างการใช้งานต่างๆ :

Comparison:
     erubi:     5786.0 i/s
       ERB:     4438.8 i/s - 1.30x  slower
      Haml:     1340.0 i/s - 4.32x  slower
      Slim:      724.1 i/s - 7.99x  slower

นี่คือไวยากรณ์ HAML ดูเหมือนว่า:

%head
  %title Ruby Templating Engines
  = 123 * 2
%body
  - foo.each do |bar|
    %p
      This Is Cool

มันแตกต่างจาก HTML ธรรมดา ดังนั้นคุณจะต้องทำความคุ้นเคย

ที่กระชับยิ่งขึ้นคือ ไวยากรณ์ของ Slim :

head
  title Ruby Templating Engines
  = 123 * 2
body
  - foo.each do |bar|
    p
      | This Is Cool

Slim ใช้อักขระไปป์สำหรับบล็อกเนื้อหาแบบหลายบรรทัด ใน Haml คุณไม่ต้องการสิ่งนั้น

มาดูการเปรียบเทียบ @ ระดับที่เก็บ Github:

REPO STARS LAST_COMMIT LATEST_RELEASE CREATED_DATE
jeremyevans/erubi 255 2019-11-05 14:09:06 2019-09-25 15:44:36 2016-11-10 22:42:44
haml/haml 3461 2019-12-27 10:51:59 2019-08-06 12:01:09 2008-02-11 22:55:26
แบบบาง/แบบบาง 4898 2019-12-15 23:55:23 2018-09-02 23:54:10 2010-09-13 01:32:07

คุณควรใช้อันไหน?

ฉันคิดว่ามันเป็นความชอบส่วนบุคคลเป็นส่วนใหญ่

แต่สิ่งหนึ่งที่ชัดเจน :

เลือกหนึ่งรายการสำหรับโปรเจ็กต์เฉพาะและเขียนเทมเพลตทั้งหมดของคุณโดยใช้เอ็นจิ้นนั้น

ห้ามมิกซ์แอนด์แมทช์

ฉันชอบใช้เทมเพลต ERB…

ด้วยข้อมูลโค้ดบรรณาธิการที่ถูกต้องและการสนับสนุน จึงไม่เป็นการเขียนที่พิเศษมากนัก

คุณยังมีตัวแปลงที่พร้อมใช้งาน (จาก/เป็น ERB) หากคุณต้องการย้ายไปยังเครื่องมืออื่น

สรุป

คุณได้เรียนรู้เกี่ยวกับเครื่องมือสร้างเทมเพลตใน Ruby แล้ว!

โปรดแบ่งปันบทความนี้และสมัครรับจดหมายข่าวของฉันหากคุณยังไม่ได้ (สมาชิกมากกว่า 9000 คน) เพื่อรับเนื้อหาที่ยอดเยี่ยมเช่นนี้

ขอบคุณที่อ่านนะคะ 🙂