我在藏匿处有一个数组引用($ sections)。我试图取消引用它并将其分配给javascript数组,但我尝试的任何工作都没有。
例如
%= javascript begin
var list = <%== $sections %>;
etc...
% end
导致列表等于ARRAY0x23456(这是正确的,因为$ sections是一个参考)
%= javascript begin
var list = <%== @$sections %>;
etc...
% end
将数组长度分配给列表(这是正确的,因为列表被视为标量赋值)。
%= javascript begin
var list = <%== $sections %>.slice();
etc...
% end
给出错误,因为$ sections是ref
%= javascript begin
var list = <%== @$sections %>.slice();
etc...
% end
可能是最有可能的候选者,但解析为[array.length] .slice()(例如3.slice()),并且失败。
我该怎么做?
EDIT; 我已经设法通过在存储中形成一个包含数组值的字符串,然后从中创建我想要的数组。
e.g。 stash包含$ string中的字符串5,6,7,8 在javascript中我可以做
array = [ <%= $string %> ];
我仍然有兴趣知道是否有办法在存储中使用arrayref来做到这一点。
答案 0 :(得分:0)
片段:
<%== @$sections %>
相当于:
print scalar @$sections;
...这就是你得到数组长度的原因:标量上下文中的数组是数组的长度。
要获取javascript数组,您必须替换&lt; ...&gt;下面有一些会导致输出看起来像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....