您可以使用來自this answer的JavaScript解決方案與Vaadin的component extension。
您需要連接器類,增加了中引用答案提出的簡單的JS事件偵聽器:
@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);
}-*/;
}
(您需要更改your.package
到包含VideoEndedConnector
類的包)
當事件發生時,服務器通知使用RPC:
public interface VideoEndedRpc extends ServerRpc {
void onVideoEnded();
}
最後一部分是在服務器sid上註冊RPC的擴展e和處理來電:
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);
}
}
}
你可以用你Video
組件使用它:
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");
}
});
如果您想了解更多關於Vaadin的擴展檢查this guide。
原生JavaScript部分使用GWT的JavaScript Native Interface,如果它看起來很奇怪,你可以閱讀更多關於here。
我會試一試,但有一個問題,我不清楚你的意思是:(你需要從你的包改變你的包)。我的意思是我知道你的意思,但不知道你指的是哪個包。這是UI類的包嗎? – javydreamercsw
這是'VideoEndedConnector'類的包,我忘了在答案中添加類名,現在應該會更容易理解。 –
錯誤編譯:[錯誤]錯誤'file:/ C:/ Users /.../ video/VideoEndedExtension.java' [錯誤]第37行:沒有源代碼可用於com.vaadin.ui類型。視頻;你忘了繼承一個必需的模塊嗎? [錯誤]第28行:沒有源代碼可用於com.vaadin.server.AbstractExtension類型;你忘了繼承一個必需的模塊嗎?任何想法? – javydreamercsw