Tilt เป็นอินเทอร์เฟซบาง ๆ บนเครื่องยนต์เทมเพลตทับทิมที่แตกต่างกันในความพยายามที่จะทำให้การใช้งานของพวกเขาเป็นแบบทั่วไปที่สุดเท่าที่จะทำได้ สิ่งนี้มีประโยชน์สำหรับเฟรมเวิร์กเว็บเครื่องกำเนิดไซต์คงที่และระบบอื่น ๆ ที่รองรับเอ็นจิ้นเทมเพลตหลายตัว แต่ไม่ต้องการรหัสสำหรับแต่ละรายการ
คุณสมบัติต่อไปนี้ได้รับการสนับสนุนสำหรับเครื่องยนต์เทมเพลตทั้งหมด (สมมติว่าคุณสมบัตินี้เกี่ยวข้องกับเครื่องยนต์):
เป้าหมายหลักคือการได้รับทุกสิ่งที่ระบุไว้ข้างต้นขวาสำหรับเครื่องยนต์เทมเพลตทั้งหมดที่รวมอยู่ในการกระจาย
รองรับเครื่องยนต์เทมเพลตเหล่านี้รวมอยู่ในแพ็คเกจ:
เครื่องยนต์ | ส่วนขยายไฟล์ | ห้องสมุดที่จำเป็น | ผู้ดูแล |
---|---|---|---|
Asciidoctor | .ad, .adoc, .asciidoc | asciidoctor (> = 0.1.0) | ชุมชน |
ERB | .erb, .rhtml | ไม่มี (รวม Ruby Stdlib) | ทีมเอียง |
การแก้ไข | .STR | ไม่มี (รวม Ruby Core) | ทีมเอียง |
Erubi | .erb, .rhtml,. ERUBI | Erubi | ชุมชน |
Erubis | .erb, .rhtml,. ERUBIS | Erubis | ทีมเอียง |
เสียงดัง | .haml | เสียงดัง | ทีมเอียง |
เขี้ยว | . | sass-embedded (> = 1.0) หรือ sassc (> = 2.0) | ทีมเอียง |
SCSS | .SCSS | sass-embedded (> = 1.0) หรือ sassc (> = 2.0) | ทีมเอียง |
ผู้สร้าง | . builder | ผู้สร้าง | ทีมเอียง |
ของเหลว | .ของเหลว | ของเหลว | ชุมชน |
rdiscount | .markdown, .mkd, .md | rdiscount | ชุมชน |
รอยแดง | .markdown, .mkd, .md | รอยแดง | ชุมชน |
Kramdown | .markdown, .mkd, .md | Kramdown | ชุมชน |
ปนด็อก | .markdown, .mkd, .md | ปนด็อก | ชุมชน |
ปรับโครงสร้างข้อความ | . rst | ปนด็อก | ชุมชน |
มารูกู | .markdown, .mkd, .md | มารูกู | ชุมชน |
ผู้ร่วมงาน | .markdown, .mkd, .md | ผู้ร่วมงาน | ชุมชน |
ผ้าสีแดง | . สิ่งทัศนคติ | ผ้าสีแดง | ชุมชน |
RDOC | . rdoc | RDOC | ทีมเอียง |
รัศมี | .รัศมี | รัศมี | ชุมชน |
การทำเครื่องหมาย | . มิด | การทำเครื่องหมาย | ทีมเอียง |
Nokogiri | .Nokogiri | Nokogiri | ชุมชน |
CoffeeScript | .กาแฟ | Coffee-Script (+ JavaScript) | ทีมเอียง |
CoffeeScript (รู้หนังสือ) | . litcoffee | Coffee-Script (> = 1.5.0) (+ JavaScript) | ทีมเอียง |
Livescript | .ls | LiveScript (+ JavaScript) | ทีมเอียง |
ตัวพิมพ์ใหญ่ | .TS | typescript (+ JavaScript) | ทีมเอียง |
ครีโอล (มาร์กอัปวิกิ) | .wiki, .creole | ครีโอล | ชุมชน |
Wikicloth (มาร์กอัปวิกิ) | .wiki, .mediawiki, .mw | wikicloth | ชุมชน |
Yajl | .yajl | Yajl-ruby | ชุมชน |
CSV | .rcsv | ไม่มี (รวม Ruby Stdlib) | ทีมเอียง |
กุ้ง | .กุ้ง | กุ้ง (> = 2.0.0) | ชุมชน |
บาเบล | .es6, .babel, .jsx | Babel-transpiler | ทีมเอียง |
โอปอล | . RB | โอปอล | ชุมชน |
เอ็นจิ้นเทมเพลตที่รองรับทุกเครื่องมี ผู้ดูแล โปรดทราบว่านี่คือผู้ดูแลการรวมการเอียงไม่ใช่ผู้ดูแลของเครื่องยนต์เทมเพลตเอง ผู้ดูแลระบบมีหน้าที่รับผิดชอบในการรวมการรวมที่เพียงพอและรักษาความเข้ากันได้ย้อนหลังในรุ่นเอียง การรวมกลุ่มบางอย่างได้รับการดูแลโดย ชุมชน ซึ่งได้รับการจัดการในวิธีต่อไปนี้:
เครื่องยนต์เทมเพลตเหล่านี้จัดส่งด้วยการรวมเอียงของตัวเอง:
เครื่องยนต์ | ส่วนขยายไฟล์ | ห้องสมุดที่จำเป็น |
---|---|---|
บาง | .บาง | ผอม (> = 0.7) |
จาวาสคริปต์ฝังตัว | เฟือง | |
coffeescript | เฟือง | |
jst | เฟือง | |
โหมดองค์กร | .org | org-ruby (> = 0.6.2) |
emacs org | .org | Tilt-Emacs_org |
มือจับ | .hbs, แฮนด์บาร์ | มือจับมือ |
jbuilder | .jbuilder | Tilt-jbuilder |
ดู Templates.md สำหรับข้อมูลโดยละเอียดเกี่ยวกับตัวเลือกเครื่องยนต์เทมเพลตและคุณสมบัติที่รองรับ
ความพึงพอใจทันที:
require 'erb'
require 'tilt'
template = Tilt . new ( 'templates/foo.erb' )
=> #<Tilt::ERBTemplate @file="templates/foo.erb" ...>
output = template . render
=> "Hello world!"
ขอแนะนำให้โปรแกรมการโทรต้องใช้ไลบรารีเครื่องยนต์เทมเพลตอย่างชัดเจน (เช่น 'ERB' ด้านบน) ในเวลาโหลด ความพยายามเอียงที่จะขี้เกียจต้องใช้ไลบรารีเครื่องยนต์เทมเพลตในครั้งแรกที่เทมเพลตถูกสร้างขึ้น แต่สิ่งนี้มีแนวโน้มที่จะเกิดข้อผิดพลาดในสภาพแวดล้อมเธรด
โมดูล {tilt} มีคลาสการใช้งานทั่วไปสำหรับเครื่องยนต์เทมเพลตที่รองรับทั้งหมด แต่ละคลาสเทมเพลตจะยึดติดกับอินเทอร์เฟซเดียวกันสำหรับการสร้างและการแสดงผล ในตัวอย่างความพึงพอใจทันทีเราปล่อยให้ Tilt กำหนดคลาสการใช้งานเทมเพลตตามชื่อไฟล์ แต่การใช้งาน {tilt :: tilt :: สามารถใช้งานได้โดยตรง:
require 'tilt/haml'
template = Tilt :: HamlTemplate . new ( 'templates/foo.haml' )
output = template . render
วิธี render
ใช้ขอบเขตการประเมินเพิ่มเติมและอาร์กิวเมนต์แฮชในท้องถิ่น ที่นี่เทมเพลตได้รับการประเมินภายในบริบทของวัตถุ Person
ที่มี locals x
และ y
:
require 'tilt/erb'
template = Tilt :: ERBTemplate . new ( 'templates/foo.erb' )
joe = Person . find ( 'joe' )
output = template . render ( joe , :x => 35 , :y => 42 )
หากไม่มีการจัดเตรียมขอบเขตเทมเพลตจะถูกประเมินภายในบริบทของวัตถุที่สร้างขึ้นด้วย Object.new
วิธี render
ของอินสแตนซ์ Template
เดียวอาจถูกเรียกว่าหลายครั้งด้วยอาร์กิวเมนต์ขอบเขตและท้องถิ่นที่แตกต่างกัน ดำเนินการต่อตัวอย่างก่อนหน้านี้เราแสดงเทมเพลตที่รวบรวมเดียวกัน แต่คราวนี้อยู่ในขอบเขตของเจน:
jane = Person . find ( 'jane' )
output = template . render ( jane , :x => 22 , :y => nil )
บล็อกสามารถส่งผ่านไปยัง render
สำหรับเทมเพลตที่รองรับการใช้รหัสทับทิมโดยพลการ (โดยปกติจะมีรูปแบบของ yield
บางอย่าง) ตัวอย่างเช่นสมมติว่าสิ่งต่อไปนี้ใน foo.erb
:
Hey <%= yield %>!
บล็อกที่ส่งผ่านไปยัง render
เรียกว่า yield
:
template = Tilt :: ERBTemplate . new ( 'foo.erb' )
template . render { 'Joe' }
# => "Hey Joe!"
คลาส {Tilt :: Mapping} รวมถึงวิธีการเชื่อมโยงคลาสการใช้งานเทมเพลตกับรูปแบบชื่อไฟล์และสำหรับการค้นหา/อินสแตนซ์เทมเพลตคลาสตามการเชื่อมโยงเหล่านั้น
โมดูล {tilt} มีอินสแตนซ์ทั่วโลกของ Mapping
ที่เติมด้วยตารางของเครื่องยนต์เทมเพลตด้านบน
เมธอด {tilt.register} เชื่อมโยงรูปแบบชื่อไฟล์กับการใช้งานเทมเพลตเฉพาะ หากต้องการใช้ ERB สำหรับไฟล์ที่ลงท้ายด้วยส่วนขยาย .bar
:
>> Tilt . register Tilt :: ERBTemplate , 'bar'
>> Tilt . new ( 'views/foo.bar' )
=> #<Tilt::ERBTemplate @file="views/foo.bar" ...>
การดึงคลาสเทมเพลตสำหรับไฟล์หรือนามสกุลไฟล์:
>> Tilt [ 'foo.bar' ]
=> Tilt :: ERBTemplate
>> Tilt [ 'haml' ]
=> Tilt :: HamlTemplate
การดึงรายการคลาสเทมเพลตสำหรับไฟล์:
>> Tilt . templates_for ( 'foo.bar' )
=> [ Tilt :: ERBTemplate ]
>> Tilt . templates_for ( 'foo.haml.bar' )
=> [ Tilt :: ERBTemplate , Tilt :: HamlTemplate ]
คลาสเทมเพลตถูกกำหนดโดยการค้นหาชุดรูปแบบชื่อที่เฉพาะเจาะจงที่ลดลง เมื่อสร้างเทมเพลตใหม่ด้วย Tilt.new('views/foo.html.erb')
เราตรวจสอบการแมปเทมเพลตต่อไปนี้:
views/foo.html.erb
foo.html.erb
html.erb
erb
การเอียงจำเป็นต้องทราบการเข้ารหัสของแม่แบบเพื่อทำงานอย่างถูกต้อง:
Tilt จะใช้ Encoding.default_external
เป็นการเข้ารหัสเมื่ออ่านไฟล์ภายนอก หากคุณทำงานกับการเข้ารหัสหนึ่งครั้ง (เช่น UTF-8) เรา ขอ แนะนำให้ตั้งค่าตัวเลือกนี้ เมื่อให้บล็อกตัวอ่านที่กำหนดเอง ( Tilt.new { custom_string }
) คุณจะมั่นใจได้ว่าสตริงจะถูกเข้ารหัสด้วยตัวเองอย่างถูกต้อง
เครื่องยนต์เทมเพลตส่วนใหญ่ในการเอียงยังช่วยให้คุณสามารถแทนที่การเข้ารหัสโดยใช้ :default_encoding
-option:
tmpl = Tilt . new ( 'hello.erb' , :default_encoding => 'Big5' )
ในที่สุดมันก็ขึ้นอยู่กับเอ็นจิ้นเทมเพลตวิธีจัดการการเข้ารหัส: มันอาจเคารพ :default_encoding
มันอาจถือว่าเป็น UTF-8 (เช่น CoffeeScript) หรือสามารถตรวจจับการเข้ารหัสของตัวเองได้
การรวบรวมซอร์สโค้ดทับทิมที่สร้างขึ้นโดยเครื่องยนต์เทมเพลตและนำมาใช้ซ้ำในการเรียกใช้เทมเพลตที่ตามมา เกณฑ์มาตรฐานแสดงให้เห็นว่าการเพิ่มประสิทธิภาพ 5x-10x มากกว่าการประเมินแหล่งทับทิมในการร้องขอแต่ละครั้ง
ปัจจุบันการรวบรวมเทมเพลตได้รับการสนับสนุนสำหรับเครื่องยนต์เทมเพลตเหล่านี้: StringTemplate, Erb, Erubis, Erubi, Haml, Nokogiri, Builder และ Yajl
Tilt เป็นลิขสิทธิ์ (c) 2010 Ryan Tomayko และแจกจ่ายภายใต้ใบอนุญาต MIT ดูไฟล์ COPYING
สำหรับข้อมูลเพิ่มเติม