我正在尝试在 JavaScript 中扩展一个具体的 Java 类(来自 javafx 库的 TableCell),然后在超类上调用一个方法。我用 Rhino 引擎做这个没有问题,但它在 Nashorn 上失败了。我的代码是:
var Cell = Java.extend(fx.TableCell);
var cell = new Cell() {
updateItem: function (item, isEmpty) {
if(!isEmpty){
cell.super$setText(item);
}
}
};
return cell;
除了上面在8 月添加到 nashorn 的“super$setText”语法之外,我还尝试了 nashorn 指南中访问超类方法中Java.super
提到的调用:
var Cell = Java.extend(fx.TableCell);
var cell = new Cell() {
updateItem: function (item, isEmpty) {
if(!isEmpty){
Java.super(cell).setText(item);
}
}
};
return cell;
当填充相应的表视图时,这些片段都失败了。cell.super$setText
throws'null' has no such function "super$setText"
这让我觉得很奇怪,因为我已经粘贴了该方法的全部内容 - 封闭变量应该不可能cell
变为 null。Java.super(cell).setText
抛出“不能调用未定义。”
我还尝试了方便的属性语法cell.text = item
,它似乎设置了一个新的 javascript 字段而没有抱怨,但没有在表格视图中显示文本。
我的 JDK8 版本是最近的
C:\> java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b124)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b66, mixed mode)
我无法辨别这是一个 nashorn 错误,还是我的来源有问题。这是正确的语法吗?我还想知道它是否重要,setText
它没有定义在 上TableCell
,而是它的超类之一。nashorn 是否只能向上遍历层次结构?