如何在javascript定义中运行haml in haml?
- 如何在haml中的javascript中运行ruby代码?
- 如果我在我的例子中使用
var = #{message}
,我会得到undefined local variable or method message
- 当我移动
- message = 'it works'
上面:javascript
一切正常
我想在里面运行迭代 .each
:javascript
。 请参阅最后一个代码示例,了解我在最终的javascript代码中需要什么。 在哪里我需要循环一些ruby变量(或散列哈希哈希?)来获得这个。 数据(=’基础’)可以有很少的元素。 它可以有少数元素的孩子等。
这个haml代码
%html %head :javascript $(document).ready(function() { - message = 'it works' var = message }); %body - message2 = 'hi' = message2 %div{:id =>"jstree"}
给了我这个HTML代码
// hi
我想用haml生成的最终javascript代码是javascript变量
var data = [{ data: "basics", attr: {}, children: [ {data: "login", attr: {run: "run"}, children: [ {data: "login", attr: {}} ] } , {data: "Academic Year", attr: {run: "run"}, children: [ {data: "login", attr: {}}, {data: "Academic Year", attr: {filter: "mini", SOF: "yes"}} ] } ] }];
首先,让我们回顾一下您似乎知道的内容:
- Ruby要求您在使用它们之前定义局部变量。
- 您可以使用
- ...
在filter之外的行上运行Ruby代码。 - 您使用
#{...}
标记在filter中插入Ruby代码。
你说你想要运行each
,但可能你想要输出这个; 因为#{...}
的结果变成了一个字符串并放入你的代码中,你真正想要的(可能)是map
:
%html %head :javascript var foo = []; #{ limit = rand(4)+3 array = (0..limit).to_a array.map{ |i| "foo[#{i}] = #{rand(12)};" }.join ' ' } console.log(foo.length); %body
运行上面的代码给出了这个输出:
如您所见,大的#{...}
块(可能跨越多行)运行任意Ruby代码。 最后一个表达式的结果(在本例中为map{...}.join
)将转换为字符串并放在输出中。
filter的haml文档声明可以使用#{}
插入Ruby代码
- flavor = "raspberry" #content :textile I *really* prefer _#{h flavor}_ jam.