summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-06-15 12:44:01 +0300
committerLeif Åstrand <leif@vaadin.com>2012-06-15 12:44:01 +0300
commit5422622f3536f060f21a000ff2193d6565f944c9 (patch)
treeb5d0894a3837ca82dc3fd6355bdf616a2870636d /src/com/vaadin
parentcbf51da8e72d4269c97fd5a17ed09a9d2b7eeb69 (diff)
downloadvaadin-framework-5422622f3536f060f21a000ff2193d6565f944c9.tar.gz
vaadin-framework-5422622f3536f060f21a000ff2193d6565f944c9.zip
Add support for callbacks in other objects (e.g. "foo.bar") (#6730)
Diffstat (limited to 'src/com/vaadin')
-rw-r--r--src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java b/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
index 72bd253ecb..d0bd4a1bf1 100644
--- a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
@@ -52,7 +52,18 @@ public class JavaScriptManagerConnector extends AbstractExtensionConnector {
private native void addCallback(String name)
/*-{
var m = this;
- $wnd[name] = $entry(function() {
+ var target = $wnd;
+ var parts = name.split('.');
+
+ for(var i = 0; i < parts.length - 1; i++) {
+ var part = parts[i];
+ if (target[part] === undefined) {
+ target[part] = {};
+ }
+ target = target[part];
+ }
+
+ target[parts[parts.length - 1]] = $entry(function() {
//Must make a copy because arguments is an array-like object (not instanceof Array), causing suboptimal JSON encoding
var args = Array.prototype.slice.call(arguments, 0);
m.@com.vaadin.terminal.gwt.client.extensions.javascriptmanager.JavaScriptManagerConnector::sendRpc(Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;)(name, args);
@@ -60,9 +71,25 @@ public class JavaScriptManagerConnector extends AbstractExtensionConnector {
}-*/;
// TODO only remove what we actually added
+ // TODO We might leave empty objects behind, but there's no good way of
+ // knowing whether they are unused
private native void removeCallback(String name)
/*-{
- delete $wnd[name];
+ var target = $wnd;
+ var parts = name.split('.');
+
+ for(var i = 0; i < parts.length - 1; i++) {
+ var part = parts[i];
+ if (target[part] === undefined) {
+ $wnd.console.log(part,'not defined in',target);
+ // No longer attached -> nothing more to do
+ return;
+ }
+ target = target[part];
+ }
+
+ $wnd.console.log('removing',parts[parts.length - 1],'from',target);
+ delete target[parts[parts.length - 1]];
}-*/;
private static native void eval(String Script)