mojolicious 将数组分配给 JavaScript 变量
mojolicious assign an array to a javascript variable
我在仓库里有一个数组引用($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是一个引用
%= javascript begin
var list = <%== @$sections %>.slice();
etc...
% end
可以说是最有可能的候选者,但解析为 [array.length].slice()(例如 3.slice()),并且失败了。
我该怎么做?
编辑;我设法通过在存储中形成一个包含数组值的字符串,然后从中创建我想要的数组来做到这一点。
例如,Stash包含字符串5,6,7,8$string在JavaScript中,我可以做
array = [ <%= $string %> ];
我仍然有兴趣知道是否有办法使用藏匿处的 arrayref 来做到这一点。
片段:
<%== @$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....
相关文章:
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量