开发者问题收集

java.lang.Throwable:ReferenceError:事件未定义

2015-12-15
99

如何通过 javascript 的 event.target.value 获取被点击元素的文本?

我找到了 这个 knockoutjs 示例 ,想将其移植到 Dukescript。

这是我的尝试:

HTML

<div class='liveExample'>   
    <h2 class="outmodel" data-bind="value: 'A', click: myFunction">Aaaaa</h2>  
    <h2 class="outmodel" data-bind="value: 'B', click: myFunction">Bbbbb</h2>
    <h2 class="outmodel" data-bind="value: 'C', click: myFunction">Ccccc</h2>
  <hr />
  <h1 data-bind="text: say"></h1>
</div>

Java:

package dew.demo.ko4j;

import net.java.html.json.*;
import net.java.html.js.*;

@Model(className="Hello", properties={
  @Property(name="say", type=String.class)
})
final class HelloViaKO {

  @Function public static void myFunction(Hello model){
    model.setSay(getTextValue());
  } 

  @JavaScriptBody(args={}, body = "return event.target.value;")
  private static native String getTextValue();

  static {
    Hello model = new Hello("Hello World!");
    model.applyBindings();
  }
}

你可以在这个 Fiddle 上看到它,如果你查看控制台,会出现以下消息

java.lang.Throwable: ReferenceError: 事件不存在定义

由于 java.awt.Event 不存在,我们如何像 this.myFunction = function (data, event) 那样引用事件?

2个回答

您应使用

@Function public static void myFunction(Hello model, String data) {
  model.setSay(data);
}

就像经典的 DEW 示例 那样。

Jaroslav Tulach
2015-12-15

同样,此示例在常规 DukeScript 项目中运行良好,但在 DEW 中失败。(可能是时候更新 DEW 了)

monacotoni
2015-12-15