Sie können die JavaScript-Lösung von this answer mit Vaadins component extension verwenden.
Sie benötigen Stecker-Klasse, die in der zitierten Antwort vorgeschlagen einfache JS-Ereignis-Listener fügt hinzu:
@Connect(VideoEndedExtension.class)
public class VideoEndedConnector extends AbstractExtensionConnector {
@Override
protected void extend(ServerConnector target) {
addVideoEndedListener(((ComponentConnector) target).getWidget().getElement());
}
private void onVideoEnded() {
getRpcProxy(VideoEndedRpc.class).onVideoEnded();
}
private native void addVideoEndedListener(Element el)
/*-{
var self = this;
el.addEventListener('ended', $entry(function(e) {
[email protected]::onVideoEnded()();
}), false);
}-*/;
}
(Sie müssen your.package
um das Paket zu ändern, die VideoEndedConnector
Klasse enthält)
, wenn ein Ereignis der Server auftritt, ist mit der Verwendung von RPC informiert:
public interface VideoEndedRpc extends ServerRpc {
void onVideoEnded();
}
der letzte Teil ist Erweiterung, die RPC auf dem Server registriert sid e und verarbeitet eingehende Anrufe:
Video v = new Video("video", new ExternalResource("link.to.video"));
VideoEndedExtension ext = new VideoEndedExtension();
ext.extend(v);
ext.addVideoEndedListener(new VideoEndedListener() {
@Override
public void onVideoEnded() {
Notification.show("Video ended");
}
});
Wenn Sie mehr über Vaadin die Erweiterungen überprüfen this guide lesen wollen:
public class VideoEndedExtension extends AbstractExtension {
private List<VideoEndedListener> videoEndedListeners = new ArrayList<>();
public interface VideoEndedListener extends Serializable {
void onVideoEnded();
}
public void extend(Video video) {
super.extend(video);
registerRpc(new VideoEndedRpc() {
@Override
public void onVideoEnded() {
for (VideoEndedListener listener : videoEndedListeners) {
listener.onVideoEnded();
}
}
});
}
public void addVideoEndedListener(VideoEndedListener listener) {
if (listener != null) {
videoEndedListeners.add(listener);
}
}
}
Sie es mit Ihren Video
Komponente verwenden können.
Nativer JavaScript-Teil verwendet das JavaScript Native Interface von GWT. Wenn es Ihnen seltsam vorkommt, können Sie mehr darüber lesen here.
Ich werde es versuchen, aber habe eine Frage, ich bin nicht klar, was du damit meinst: (Sie müssen Ihr Paket von your.package ändern). Ich meine, ich weiß, was du meinst, aber nicht sicher, auf welches Paket du dich beziehst. Ist dies das Paket der UI-Klasse? – javydreamercsw
Es ist das Paket der 'VideoEndConnector'-Klasse, ich habe vergessen, den Klassennamen in der Antwort hinzuzufügen, jetzt sollte es verständlicher sein. –
Fehler beim Kompilieren: [ERROR] Fehler in 'Datei:/C:/Benutzer /.../ Video/VideoEndedExtension.java' [FEHLER] Zeile 37: Für den Typ com.vaadin.ui ist kein Quellcode verfügbar. Video; hast du vergessen, ein benötigtes Modul zu erben? [FEHLER] Zeile 28: Für den Typ com.vaadin.server.AbstractExtension ist kein Quellcode verfügbar. hast du vergessen, ein benötigtes Modul zu erben? Irgendeine Idee? – javydreamercsw