diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-06-14 21:18:49 +0300 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-06-14 21:18:49 +0300 |
commit | 72c0f66e2aa588acbb517e6d9b482c7a75faf9f1 (patch) | |
tree | 52f6a4f9febfe344d5fcb7e5a3eeb18934d0f427 /src/com/vaadin/terminal/JavaScriptCallbackHelper.java | |
parent | 755adc2731383e6e04ddfa5bee04b6ed6feaf243 (diff) | |
download | vaadin-framework-72c0f66e2aa588acbb517e6d9b482c7a75faf9f1.tar.gz vaadin-framework-72c0f66e2aa588acbb517e6d9b482c7a75faf9f1.zip |
Use callbacks directly as fields in connector object (#8888)
Diffstat (limited to 'src/com/vaadin/terminal/JavaScriptCallbackHelper.java')
-rw-r--r-- | src/com/vaadin/terminal/JavaScriptCallbackHelper.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java index 5ea5e56255..c1da8b36ba 100644 --- a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java +++ b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java @@ -11,6 +11,7 @@ import java.util.Map; import com.vaadin.external.json.JSONArray; import com.vaadin.external.json.JSONException; +import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper.JavaScriptConnectorState; import com.vaadin.tools.ReflectTools; import com.vaadin.ui.JavaScript.JavaScriptCallbackRpc; import com.vaadin.ui.JavaScriptCallback; @@ -31,9 +32,19 @@ public class JavaScriptCallbackHelper { public void registerCallback(String functionName, JavaScriptCallback javaScriptCallback) { callbacks.put(functionName, javaScriptCallback); + JavaScriptConnectorState state = getConnectorState(); + if (state.getCallbackNames().add(functionName)) { + connector.requestRepaint(); + } ensureRpc(); } + private JavaScriptConnectorState getConnectorState() { + JavaScriptConnectorState state = (JavaScriptConnectorState) connector + .getState(); + return state; + } + private void ensureRpc() { if (javascriptCallbackRpc == null) { javascriptCallbackRpc = new JavaScriptCallbackRpc() { @@ -51,6 +62,12 @@ public class JavaScriptCallbackHelper { } public void invokeCallback(String name, Object... arguments) { + if (callbacks.containsKey(name)) { + throw new IllegalStateException( + "Can't call callback " + + name + + " on the client because a callback with the same name is registered on the server."); + } JSONArray args = new JSONArray(Arrays.asList(arguments)); connector.addMethodInvocationToQueue( JavaScriptCallbackRpc.class.getName(), CALL_METHOD, |