mojolicious分配一个数组到一个javascript变量
问题描述:
我有一个数组引用($部分)在藏匿处。我试图取消这个并将其分配给一个JavaScript数组,但没有任何我尝试的作品。mojolicious分配一个数组到一个javascript变量
例如
%= javascript begin
var list = <%== $sections %>;
etc...
% end
导致列表等于ARRAY0x23456(这是正确的,因为$部分是一个REF)
%= javascript begin
var list = <%== @$sections %>;
etc...
% end
给数组长度列出(因为列表被处理,其是正确的作为标量分配)。
%= javascript begin
var list = <%== $sections %>.slice();
etc...
% end
给出了一个错误,因为$部分是裁判
%= javascript begin
var list = <%== @$sections %>.slice();
etc...
% end
可以说是最有可能的候选人,但解析[array.length] .slice()(例如3.slice()),并失败。
我该怎么做?
编辑; 我已经设法做到这一点,形成一个字符串与其中的数组值,然后创建我想从这个数组。
例如藏匿包含$字符串 字符串5,6,7,8的JavaScript中,我可以再做
array = [ <%= $string %> ];
我还是很想知道,如果有一种方法可以做到这一点使用中的数组引用藏。
答
片段:
<%== @$sections %>
等同于:
print scalar @$sections;
...所以这就是为什么你所得到的数组的长度:在标量上下文数组是数组的长度。
为了得到一个JavaScript数组,你必须更换< ...>下面的东西,会引起输出看起来像一个JS数组:
print scalar <....>;
你可以做这样的事情:
use Mojolicious::Lite;
get '/test' => sub {
my $c = shift;
$c->stash(sections => [1, 2, 3]);
{
local $" = ", "; #The value that gets inserted between array elements
#when an array is interpolated into a string. The default
#value is a space.
$c->render('template1');
}
# $" gets reset to its previous value here
};
app->start;
__DATA__
@@ template1.html.ep
%= javascript begin
var arr = <%== "[@$sections]" %>;
console.log(arr[0]);
% end
Examine your browser's javascript console....
谢谢,我不知道S“ - 这也是有用的。所以大括号只是将作业范围限制为$”? – mark 2014-12-28 21:25:06
@mark,'local'限制对周围范围的赋值,并在该范围退出时恢复旧值,并且周围范围由大括号分隔。当您更改perl的预定义全局变量时,使用'local'被认为是很好的做法。 – 7stud 2014-12-28 21:32:28