ロジックレスモードは Mustache にインスパイアされています。ロジックレスモードは 例えば動的コンテンツを含む再帰的ハッシュツリーのような辞書オブジェクトを使います。
オブジェクトが false または empty? ではない場合, コンテンツが表示されます。
- article
h1 = title
オブジェクトが false または empty? の場合, コンテンツが表示されます。
-! article
p Sorry, article not found
オブジェクトが配列の場合, この部分は繰り返されます。
- articles
tr: td = title
Mustache のように, Slim はラムダ式をサポートします。
= person
= name
ラムダ式は次のように定義できます:
def lambda_method
"<div class='person'>#{yield(name: 'Andrew')}</div>"
end
任意に 1 つ以上のハッシュを yield
に渡すことができます。複数のハッシュを渡した場合, 先述したようにブロックが繰り返されます。
サンプルコード:
- article
h1 = title
辞書オブジェクトは :dictionary_access
オプションによって設定された順序でアクセスされます。デフォルトの順序:
シンボル
-article.respond_to?(:has_key?)
且つarticle.has_key?(:title)
の場合, Slim はarticle[:title]
を実行します。文字列
-article.respond_to?(:has_key?)
且つarticle.has_key?('title')
の場合, Slim はarticle['title']
を実行します。メソッド
-article.respond_to?(:title)
の場合, Slim はarticle.send(:title)
を実行します。インスタンス変数
-article.instance_variable_defined?(@title)
の場合, Slim はarticle.instance_variable_get @title
を実行します。
すべて失敗した場合, Slim は親オブジェクトに対して同じ順序で title の参照を解決しようとします。この例では, 親オブジェクトはレンダリングしているテンプレートに対する辞書オブジェクトになります。
ご想像のとおり, article への参照は辞書オブジェクトに対して同じ手順で行われます。インスタンス変数はビューのコードでは利用を許されていませんが, Slim はそれを見つけて使います。基本的には, テンプレートの中で @ プレフィックスを落として使っています。パラメータ付きメソッドの呼び出しは許可されません。
self
キーワードは検討中の要素を .to_s
した値を返します。
辞書オブジェクトを与え,
{
article: [
'Article 1',
'Article 2'
]
}
ビューで次のように
- article
tr: td = self
これは次のようになります。
<tr>
<td>Article 1</td>
</>
<tr>
<td>Article 2</td>
</tr>
インストール:
$ gem install slim
require で指定:
gem 'slim', require: 'slim/logic_less'
特定のアクションでのみロジックレスモードを有効化したい場合, まず設定でロジックレスモードを global に無効化します。
Slim::Engine.set_options logic_less: false
さらに, アクションの中でレンダリングする度にロジックレスモードを有効化します。
class Controller
def action
Slim::Engine.with_options(logic_less: true) do
render
end
end
end
Sinatra には Slim のビルトインサポートがあります。しなければならないのはロジックレス Slim プラグインを require することです。config.ru で require できます:
require 'slim/logic_less'
これで準備は整いました!
特定のアクションでのみロジックレスモードを有効化したい場合, まず設定でロジックレスモードを global に無効化します。
Slim::Engine.set_options logic_less: false
さらに, アクションの中でレンダリングする度にロジックレスモードを有効化します。
get '/page'
slim :page, logic_less: true
end
種類 | 名前 | デフォルト | 用途 |
---|---|---|---|
真偽値 | :logic_less | true | ロジックレスモードを有効化 ('slim/logic_less' の required が必要) |
文字列 | :dictionary | "self" | 変数が検索される辞書への参照 |
シンボル/配列<シンボル> | :dictionary_access | [:symbol, :string, :method, :instance_variable] | 辞書のアクセス順序 (:symbol, :string, :method, :instance_variable) |