javascript - 为什么 Array.prototype.filter() 在 Magnolia JavaScript 模型中抛出错误?
问题描述
我试图在Magnolia JavaScript 模型中使用Array.prototype.filter()
.
列表
[#assign list = [1, 2, 3]]
模型
var Model = function() {
this.filterList = function(list) {
return list.filter(function(item) {
return item === 2
});
}
};
new Model();
用法
${model.filterList(list)}
但是,我收到以下错误。
Caused by: jdk.nashorn.internal.runtime.ECMAException: TypeError: list.filter is not a function
Nashorn 是使用ECMAScript-262 5.1实现的。
Nashorn JavaScript 引擎首先通过 JEP 174 并入 JDK 8,作为 Rhino 脚本引擎的替代品。发布时,它是 ECMAScript-262 5.1 标准的完整实现。— JEP 335:弃用 Nashorn JavaScript 引擎
为什么尽管 Nashorn 遵循 ECMAScript-262 5.1,但在使用时会出现错误Array.prototype.filter()
?
解决方案
您传递给模型的 FreeMarker 列表是一个序列,而不是 JavaScript 数组。
Sequence (3)
0 = 1 (BigDecimal)
1 = 2 (BigDecimal)
2 = 3 (BigDecimal)
要解决此问题,请将传递给模型的 FreeMarker 列表转换为 JavaScript 数组,使用Java.from()
. 例如:
var Model = function() {
this.filterList = function(list) {
return Java.from(list).filter(function(item) {
return item === 2
});
}
};
new Model();
推荐阅读
- reactjs - 无法进行 API 调用 React Native
- java - 如何从 JAX-RS 中的 ClientResponseFilter 访问响应?
- coq - 在产品类型上定义递归函数
- python - 通过 for 循环从列表中删除不需要的字符
- typescript - 如何创建访问它正在创建的类类型的静态成员的通用工厂方法
- mapbox - Mapbox - 完全禁用聚类
- flutter - Flutter - 针对不同屏幕尺寸的响应式 ui
- python-3.x - 从 dash.dependencies 导入事件时出错
- selenium - Selenium Java Chrome 无法点击按钮
- java - doxygen 可以记录 java 默认的无参数构造函数吗?