如何在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"}} ] } ] }]; 

首先,让我们回顾一下您似乎知道的内容:

  1. Ruby要求您在使用它们之前定义局部变量。
  2. 您可以使用- ...在filter之外的行上运行Ruby代码。
  3. 您使用#{...}标记在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.