2015-10-24 2 views
0

Я делаю только приложение клиентской стороны в GWT, которое использует WebGL для применения эффектов пост-обработки к изображению. Я добавил InputElement в документ типа файла, подобный этому.Элемент ввода файла при изменении стороны клиента GWT

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

Тогда я хотел бы добавить OnChange слушателя к нему, и так, что не поддерживается в GWT, я написал этот метод JSNI, чтобы сделать это.

Проблема в том, что это бросает 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 

Есть ли какие-либо ошибки, которые я делаю?

+0

Причина для нижнего удара, пожалуйста? Я ожидаю добавить слушателя onchange в элемент ввода файла, но я не понимаю, почему эта ошибка возникает. –

ответ

1
$entry([email protected]::updateImage(*)(element)) 

$entry принимает функцию в качестве входных данных и возвращает функцию, но вы передаете результат функции updateImage.

Потому что $entry звонки apply на Переданный функции, и ваш updateImage, вероятно, имеет тип void возврата (что означает, что функция JS неявно вернется undefined), вы получите ошибку Cannot read property 'apply' of undefined.

Решение перейти на $entry функцию, которая будет вызывать updateImage:

$entry(function() { 
    [email protected]::updateImage(*)(element); 
}) 

Это, как говорится, есть ли какой-либо причине вы не используете FileUpload виджет и addChangeHandler?

+0

Причина, по которой я не использую виджет FileUpload, заключается в том, что у меня нет сервера для загрузки файла. Мой сервер - это статический сервер, который просто обслуживает только статические HTML-страницы. –

+0

Большое спасибо, это сработало для меня. –

+0

Виджет 'FileUpload' - это просто' ', поэтому это не является хорошей причиной для его не использования. –

Смежные вопросы