Giới thiệu gem Mustache Ruby on Rails
Tổng quan Mustache như một sự thay thế cho view. Thay vì view bao gồm file ERB hay HAML với helper và logic, view của bạn chia làm hai phần, Ruby class và HTML template. Chúng tôi gọi phần Ruby class là view, còn phần HTML là template. Phần template không thực thi gì nhưng tham chiếu với các ...
Tổng quan
Mustache như một sự thay thế cho view. Thay vì view bao gồm file ERB hay HAML với helper và logic, view của bạn chia làm hai phần, Ruby class và HTML template. Chúng tôi gọi phần Ruby class là view, còn phần HTML là template. Phần template không thực thi gì nhưng tham chiếu với các methods trong view của bạn. Mustache giúp viết template gọn gàng hơn, dễ dàng test hơn và giúp làm việc với front end thêm thú vị hơn.
Cài đặt
Cài đặt gem ở local:
gem install mustache
Hoặc thêm vào gemspec
s.add_dependency "mustache", "~> 1.0"
Sử dụng gem Mustache
Ví dụ:
>> require 'mustache' => true >> Mustache.render("Hello {{planet}}", :planet => "World!") => "Hello World!"
class Simple < Mustache def name "Chris" end def value 10_000 end def taxed_value value * 0.6 end def in_ca true end end
Chúng ta tạo một Ruby class đơn giản và định nghĩa các methods. Một số methods tham chiếu đến những methods khác, một số trả về values, một số trả về booleans. Bây giờ chúng ta viết template:
Hello {{name}} You have just won {{value}} dollars! {{#in_ca}} Well, {{taxed_value}} dollars, after taxes. {{/in_ca}}
Template này tham chiếu tới các methods ở view. Đây là cách để lấy chúng:
Simple.render
Kết quả trả về:
Hello Chris You have just won 10000 dollars! Well, 6000.0 dollars, after taxes.
Thật đơn giản.
Các dạng Tag
Tham khảo tại: Tag Types
Escaping
Ví dụ: Sử dụng {{variable}} trong template với 5 > 2 sẽ cho kết quả là 5 > 2. {{{variable}}} sẽ cho kết quả 5 > 2.
Dict-Style Views
Template (Winner.mustache):
Hello {{name}} You have just won {{value}} bucks!
Chúng ta có thể fill các giá trị:
view = Winner.new view[:name] = 'George' view[:value] = 100 view.render
Kết quả trả về:
Hello George You have just won 100 bucks!
Chúng ta có thể sử dụng lại cùng object:
view[:name] = 'Tony' view.render Hello Tony You have just won 100 bucks!
Templates
Mặc định, một view sẽ cố thử tìm template trên ỏ đĩa bằng cách tìm file HTML ở thư mục hiện tại:
TemplatePartial => ./template_partial.mustache
Bạn có thể thiết lập search path bằng Mustache.template_path:
class Simple < Mustache self.template_path = File.dirname(__FILE__) ... etc ... end
Nếu bạn chỉ muốn thay đổi template đã dùng, bạn có thể thay đổi trực tiếp Mustache.template_file:
Simple.template_file = './blah.mustache'
Mustache cũng cho phép bạn định nghĩa phần mở rộng sẽ dùng:
Simple.template_extension = 'xml'
Helpers
module ViewHelpers def gravatar gravatar_id = Digest::MD5.hexdigest(self[:email].to_s.strip.downcase) gravatar_for_id(gravatar_id) end def gravatar_for_id(gid, size = 30) "#{gravatar_host}/avatar/#{gid}?s=#{size}" end def gravatar_host @ssl ? 'https://secure.gravatar.com' : 'http://www.gravatar.com' end end
Include:
class Simple < Mustache include ViewHelpers def name "Chris" end def value 10_000 end def taxed_value value * 0.6 end def in_ca true end def users User.all end end
Về @ssl trong gravatar_host, có rất nhiều cách để thiết lập nó. Sau đây là ví dụ:
class Simple < Mustache include ViewHelpers def initialize(ssl = false) @ssl = ssl end ... etc ... end
Simple.new(request.ssl?).render
Cuối cùng, template có hình dạng như sau:
<ul> {{# users}} <li><img src="{{ gravatar }}"> {{ login }}</li> {{/ users}} </ul>
Tổng kết
Hy vọng qua bài viết này, mọi người có thể phần nào nắm được về gem Mustache của Rails. Bài viết được dịch từ Mustache