[英]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.