簡體   English   中英

更改GWT客戶端上的文件輸入元素

[英]File Input Element on change GWT client side

我正在GWT中制作一個僅客戶端應用程序,該應用程序使用WebGL將后處理效果應用於圖像。 我已經將InputElement添加到類型為type的文檔中。

InputElement inputElement = InputElement.as(Document.get().createFileInputElement());
inputElement.setAccept("image/*");
Document.get().getBody().appendChild(inputElement);

然后,我想向它添加一個onchange偵聽器,由於GWT不支持該偵聽器,因此我編寫了此JSNI方法來實現這一點。

private native void registerOnChange(Main object, InputElement element) /*-{
    if (!$wnd.update)
        $wnd.update = $entry(object.@com.shc.cartoonizer.client.Main::updateImage(*)(element));

    element.onchange = $wnd.update;
}-*/;

問題是,這會在文件更改時引發JS TypeError。 這是在控制台中引發的錯誤。

Uncaught TypeError: Cannot read property 'apply' of undefined
    apply_0_g$           @ Impl.java:247
    entry0_0_g$          @ Impl.java:306
    (anonymous function) @ Impl.java:72

我有什么錯誤嗎?

 $entry(object.@com.shc.cartoonizer.client.Main::updateImage(*)(element)) 

$entry將一個函數作為輸入並返回一個函數,但是您傳遞了updateImage函數的結果。

因為$entry調用apply於傳入的函數,並且您的updateImage可能具有void返回類型(這意味着JS中的函數將隱式返回undefined ),所以您將獲得Cannot read property 'apply' of undefined

解決方案是將一個將調用updateImage的函數傳遞給$entry

$entry(function() {
  object.@com.shc.cartoonizer.client.Main::updateImage(*)(element);
})

話雖如此,您是否有任何理由不使用FileUpload小部件和addChangeHandler

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM