为什么 Array.prototype.filter() 在 Magnolia JavaScript 模型中抛出错误?
Why does Array.prototype.filter() throw an error in Magnolia JavaScript models?
我正在尝试过滤 Magnolia JavaScript model using Array.prototype.filter()
中的 FreeMarker 列表。
列表
[#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 实现的。
The Nashorn JavaScript engine was first incorporated into JDK 8 via JEP 174 as a replacement for the Rhino scripting engine. When it was released, it was a complete implementation of the ECMAScript-262 5.1 standard. — JEP 335: Deprecate the Nashorn JavaScript Engine
为什么尽管 Nashorn 遵循 ECMAScript-262 5.1,但我在使用 Array.prototype.filter()
时还是会出现错误?
您传递给模型的 FreeMarker 列表是 sequence,而不是 JavaScript 数组。
Sequence (3)
0 = 1 (BigDecimal)
1 = 2 (BigDecimal)
2 = 3 (BigDecimal)
要解决此问题,请使用 Java.from()
将您传递给模型的 FreeMarker 列表转换为 JavaScript 数组。例如:
var Model = function() {
this.filterList = function(list) {
return Java.from(list).filter(function(item) {
return item === 2
});
}
};
new Model();
我正在尝试过滤 Magnolia JavaScript model using Array.prototype.filter()
中的 FreeMarker 列表。
列表
[#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 实现的。
The Nashorn JavaScript engine was first incorporated into JDK 8 via JEP 174 as a replacement for the Rhino scripting engine. When it was released, it was a complete implementation of the ECMAScript-262 5.1 standard. — JEP 335: Deprecate the Nashorn JavaScript Engine
为什么尽管 Nashorn 遵循 ECMAScript-262 5.1,但我在使用 Array.prototype.filter()
时还是会出现错误?
您传递给模型的 FreeMarker 列表是 sequence,而不是 JavaScript 数组。
Sequence (3)
0 = 1 (BigDecimal)
1 = 2 (BigDecimal)
2 = 3 (BigDecimal)
要解决此问题,请使用 Java.from()
将您传递给模型的 FreeMarker 列表转换为 JavaScript 数组。例如:
var Model = function() {
this.filterList = function(list) {
return Java.from(list).filter(function(item) {
return item === 2
});
}
};
new Model();