Per un attributo, è possibile scrivere codice Ruby dopo la =
, ma se il codice ruby ha spazi in esso, bisogna mettere parentesi attorno al codice ruby:
option[value="1" selected=("selected" if @title=="Mrs.")] "Mrs."
Vedere "Ruby attributi" qui : http://rdoc.info/gems/slim/frames.
Le parentesi sono opzionali, in modo da poter anche scrivere in questo modo:
option value="1" selected=("selected" if @title=="Mrs.") "Mrs."
Oppure, invece di staffe, è possibile utilizzare un delimitatore diverso:
option {value="1" selected=("selected" if @title=="Mrs.")} "Mrs."
Eccola con un po ' codice:
slim.slim:
doctype html
html
head
title Slim Examples
meta name="keywords" content="template language"
body
h1 Markup examples
p This example shows you how a basic Slim file looks like.
select
option[value="1" selected=("selected" if @title=="Mr.")] "Mr."
option[value="2" selected=("selected" if @title=="Mrs.")] "Mrs."
Utilizzando Slim in un programma ruby standalone senza rotaie:
require 'slim'
template = Slim::Template.new(
"slim.slim",
pretty: true #pretty print the html
)
class Person
attr_accessor :title
def initialize title
@title = title
end
end
person = Person.new("Mrs.")
puts template.render(person)
--output:--
<!DOCTYPE html>
<html>
<head>
<title>
Slim Examples
</title>
<meta content="template language" name="keywords" />
</head>
<body>
<h1>
Markup examples
</h1>
<p>
This example shows you how a basic Slim file looks like.
</p>
<select><option value="1">"Mr."</option><option selected="selected" value="2">"Mrs."</option></select>
</body>
</html>
Credo che la stringa "false" viene interpretato come vero.
Sì. Le sole cose che valutano false sono false e nulle. Qualsiasi numero (incluso 0), qualsiasi stringa (incluso "") e qualsiasi array (incluso []), ecc. Sono tutti veri.
Non pertinente al tuo problema, ma forse utile per qualche ricercatore futuro ... Immagino che Slim analizzi le variabili di istanza in qualunque oggetto tu passi come argomento da renderizzare. Quindi, se vuoi fornire un sacco di valori per il modello, puoi scrivere:
require 'slim'
template = Slim::Template.new(
"slim.slim",
pretty: true #pretty print the html
)
class MyVals
attr_accessor :count, :title, :animals
def initialize count, title, animals
@count = count
@title = title
@animals = animals
end
end
vals = MyVals.new(4, "Sir James III", %w[ squirrel, monkey, cobra ])
puts template.render(vals)
slim.slim:
doctype html
html
head
title Slim Examples
meta name="keywords" content="template language"
body
p [email protected]
p [email protected]
p [email protected][-1]
Né OpenStruct né Struct funzionano con render() anche se sembrano candidati naturali.