スリムテンプレートエンジン-Haml'yの代替

Hamlを試してみたかったのですが、時間がありませんでした。 しかし最近、新しいテンプレートエンジンを発見し、すぐに気に入った。 クリエイターによると、彼はジェイドとハムルから最高のものを取りました。 主なタスクは、コードの量を減らすことであり、怖くて理解しにくいものにすることではありません。



これは、Slimを使用したテンプレートの外観です。

doctype html html head title Slim Examples meta name="keywords" content="template language" body h1 Markup examples #content.example1 p Nest by indentation = yield - unless items.empty? table - for item in items do tr td = item.name td = item.price - else p No items found #footer | Copyright © 2010 Andrew Stone = render 'tracking_code' script | $(content).do_something();
      
      







Hamlと同様に、出力のフォーマットはインデントされます。 構成<%=%>の代わりに、 =記号が使用されます。 htmlに出力のない計算(たとえば、 ifおよびfor )の場合、 -記号付けられます。



Hamlとは異なり、タグが割り当てられる%記号はありません。 そのまますぐに書くことができます。 基本的に、それは<>括弧のないHTMLであり、パディングを使用してネストされた要素を示します。 ところで、インデントの数はあなたの選択ですが、1つ以上ではありません。



すべての演算子のリスト:


 |    ,     .    ""  . '       ,     . -      Haml,   ,   ,      <% ... %> =     <%= ... %>,    html ='     ,      . ==     ,    " ",    escape_html =='  ,   ,     . /  .         html . /!   html  (<!-- -->),    .
      
      







属性とコメント


次のようにidとクラスを指定できます。

 blockquote id="quote-#{@quote.id}" class="quote" p class="title" = @quote.title p style="padding:1em;" = @quote.body
      
      







Hamlとの比較:

 %blockquote{:id => "quote-#{@quote.id}", :class => "quote"} %p{:class="title"}= @quote.title %p{:style => "padding:1em;"}= @quote.body
      
      







Slimでは、いくつかの構文オプションも使用できます。
 /    .   , ,    Haml' #nav.top div id="nav" class="top" /       h1 class=page_header_class = page_header h1{class=page_header_class} = page_header h1[class=page_header_class] = page_header h1(class=page_header_class) = page_header
      
      







もう1つの良い点は、属性に引用符が含まれていない場合、変数が使用されることです。 上記の数行の例から、変数page_header_classが使用されていることがわかります。

 #    ,  . a href="#{url_for @user}" = @user.name #        "#{...}" a href=url_for(@user) = @user.name
      
      







関数がfalseを返す場合、属性はhtmlに表示されません(Hamlの場合):

 option value="Slim" selected=option_selected?("Slim") # -> <option value="Slim"></option>
      
      







Rubyの文字列のように補間を使用できます。

 body h1 , #{current_user.name} |     #{{content}}   ,    escape_html.
      
      









コメントの仕組みがとても気に入っています。 コメントアウトするコードブロックがある場合は、1行追加するだけで、ブロック全体に影響します。

 #          /.comments - @comments.each do |comment| == render comment
      
      







renderメソッドはデフォルトで出力をフィルタリングするので、escape_htmlが2回動作しないように、その前に二重等号を置く必要があることを考慮する価値があります。



ロジックレスモード


 Slim::Engine.set_default_options :sections => true
      
      





そして、それを使ってできることは次のとおりです。

 /     false  empty?,    h1   - article h1 = title
      
      







 /  ,  article   false  empty?     -! article p   
      
      







おそらく、最初の例を読んだ後に質問があります-変​​数 'title'はどこから来たのでしょうか? スリム自身はいくつかの方法で彼女を見つけようとします。

 / If article.respond_to?(:title) - article /  article.send(:title) h1 = title
      
      





 / If article.respond_to?(:has_key?) and article.has_key?(:title) - article /   article[:title] h1 = title
      
      





 / If article.instance_variable_defined?(@title) - article /       article.instance_variable_get @title h1 = title
      
      





個人的には、私はこのモードが好きではありませんでしたが、多分あなたはそれを好きになるでしょう。



パフォーマンスはどうですか


レール内のテンプレートはキャッシュされるため、最初にアクセスされた場合にのみ、標準のErbよりも速度が遅くなります。 以下は、Slimがアプリケーションのボトルネックにならないことを示す比較チャートです。

 # Linux + Ruby 1.9.2, 1000 iterations user system total real (1) erb 0.680000 0.000000 0.680000 ( 0.810375) (1) erubis 0.510000 0.000000 0.510000 ( 0.547548) (1) fast erubis 0.530000 0.000000 0.530000 ( 0.583134) (1) slim 4.330000 0.020000 4.350000 ( 4.495633) (1) haml 4.680000 0.020000 4.700000 ( 4.747019) (1) haml ugly 4.530000 0.020000 4.550000 ( 4.592425) (2) erb 0.240000 0.000000 0.240000 ( 0.235896) (2) erubis 0.180000 0.000000 0.180000 ( 0.185349) (2) fast erubis 0.150000 0.000000 0.150000 ( 0.154970) (2) slim 0.050000 0.000000 0.050000 ( 0.046685) (2) haml 0.490000 0.000000 0.490000 ( 0.497864) (2) haml ugly 0.420000 0.000000 0.420000 ( 0.428596) (3) erb 0.030000 0.000000 0.030000 ( 0.033979) (3) erubis 0.030000 0.000000 0.030000 ( 0.030705) (3) fast erubis 0.040000 0.000000 0.040000 ( 0.035229) (3) slim 0.040000 0.000000 0.040000 ( 0.036249) (3) haml 0.160000 0.000000 0.160000 ( 0.165024) (3) haml ugly 0.150000 0.000000 0.150000 ( 0.146130) (4) erb 0.060000 0.000000 0.060000 ( 0.059847) (4) erubis 0.040000 0.000000 0.040000 ( 0.040770) (4) slim 0.040000 0.000000 0.040000 ( 0.047389) (4) haml 0.190000 0.000000 0.190000 ( 0.188837) (4) haml ugly 0.170000 0.000000 0.170000 ( 0.175378) 1.      .   ,   slow=1. 2.  .   .  Ruby         .     API . 3.  .    ,   ,  Ruby    .    ,          . 4.  Tilt-.     Tilt,              Sinatra, Ramaze and Camping.
      
      





インストール方法


2つのオプションがあります。 最初-テンプレートジェネレーターを追加せず(たとえば、足場を作成するため)。 第二-ジェネレーター付き。

 #     Slim gem 'slim' #    Slim   Scaffold' gem 'slim-rails'
      
      



次に、選択したgemをインストールするために、コンソールにバンドルインストールを登録する必要があります。



Slimを使用するには、ファイルの拡張子が.slimでなければならないことを忘れないでください。 つまり、 index.html.erbファイルはErbテンプレートエンジンによって実行され、 index.html.slimファイルはそれぞれスリムになります。



便利なリンク


slim - lang.com-公式ページ

github.com/stonean/slim-Githubのページ

github.com/fredwu/haml2slim-HamlからSlimへのコンバーター

github.com/fredwu/ruby-slim-tmbundle-TextMateのバンドル

github.com/bbommarito/vim-slim-Vimのファイル



All Articles