Giới thiệu gem Mustache Ruby on Rails
Bài đăng này đã không được cập nhật trong 8 năm
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
All rights reserved