diff options
author | Marc Englund <marc@vaadin.com> | 2012-11-23 19:06:20 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2012-11-23 19:06:20 +0000 |
commit | 4b6ef93fa96fc175854294f5b02ab8f333e30e1a (patch) | |
tree | 270cc080c8fd4e0d14b55298d0718422d958c00b | |
parent | e2c2624ef2b5de8d1719dd505c9dc6aee9e9b7c4 (diff) | |
parent | 62eff6b8165bed7c347fd0129d43b7b2bbe8728e (diff) | |
download | vaadin-framework-4b6ef93fa96fc175854294f5b02ab8f333e30e1a.tar.gz vaadin-framework-4b6ef93fa96fc175854294f5b02ab8f333e30e1a.zip |
Merge "Allow JavaScriptConnectors to get unRegister events (#9292)"
6 files changed, 52 insertions, 10 deletions
diff --git a/client/src/com/vaadin/client/JavaScriptConnectorHelper.java b/client/src/com/vaadin/client/JavaScriptConnectorHelper.java index 80d5297d33..b275cd0a68 100644 --- a/client/src/com/vaadin/client/JavaScriptConnectorHelper.java +++ b/client/src/com/vaadin/client/JavaScriptConnectorHelper.java @@ -96,7 +96,7 @@ public class JavaScriptConnectorHelper { inited = true; } - fireNativeStateChange(wrapper); + invokeIfPresent(wrapper, "onStateChange"); } }); } @@ -165,14 +165,6 @@ public class JavaScriptConnectorHelper { return connectorWrapper; } - private static native void fireNativeStateChange( - JavaScriptObject connectorWrapper) - /*-{ - if (typeof connectorWrapper.onStateChange == 'function') { - connectorWrapper.onStateChange(); - } - }-*/; - private static native JavaScriptObject createConnectorWrapper( JavaScriptConnectorHelper h, ApplicationConnection c, JavaScriptObject nativeState, JavaScriptObject registeredRpc, @@ -382,4 +374,16 @@ public class JavaScriptConnectorHelper { return (JavaScriptConnectorState) connector.getState(); } + public void onUnregister() { + invokeIfPresent(connectorWrapper, "onUnregister"); + } + + private static native void invokeIfPresent( + JavaScriptObject connectorWrapper, String functionName) + /*-{ + if (typeof connectorWrapper[functionName] == 'function') { + connectorWrapper[functionName].apply(connectorWrapper, arguments); + } + }-*/; + } diff --git a/client/src/com/vaadin/client/JavaScriptExtension.java b/client/src/com/vaadin/client/JavaScriptExtension.java index 0a3d6b81ba..bf1bb5b56a 100644 --- a/client/src/com/vaadin/client/JavaScriptExtension.java +++ b/client/src/com/vaadin/client/JavaScriptExtension.java @@ -43,4 +43,10 @@ public final class JavaScriptExtension extends AbstractExtensionConnector public JavaScriptExtensionState getState() { return (JavaScriptExtensionState) super.getState(); } + + @Override + public void onUnregister() { + super.onUnregister(); + helper.onUnregister(); + } } diff --git a/client/src/com/vaadin/client/ui/JavaScriptComponentConnector.java b/client/src/com/vaadin/client/ui/JavaScriptComponentConnector.java index 82ab32e23e..0dab9e21a6 100644 --- a/client/src/com/vaadin/client/ui/JavaScriptComponentConnector.java +++ b/client/src/com/vaadin/client/ui/JavaScriptComponentConnector.java @@ -54,4 +54,10 @@ public final class JavaScriptComponentConnector extends public JavaScriptComponentState getState() { return (JavaScriptComponentState) super.getState(); } + + @Override + public void onUnregister() { + super.onUnregister(); + helper.onUnregister(); + } } diff --git a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html index 56d86fdc6c..d7024b2972 100644 --- a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html +++ b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html @@ -56,6 +56,16 @@ <td>vaadin=runcomvaadintestscomponentsjavascriptcomponentBasicJavaScriptComponent::/VVerticalLayout[0]/VVerticalLayout[0]/JavaScriptWidget[0]/domChild[3]</td> <td>1. Parent element className: v-verticallayout v-layout v-vertical v-widget v-has-width</td> </tr> +<tr> + <td>click</td> + <td>vaadin=runcomvaadintestscomponentsjavascriptcomponentBasicJavaScriptComponent::PID_SRemoveButton/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>assertText</td> + <td>vaadin=runcomvaadintestscomponentsjavascriptcomponentBasicJavaScriptComponent::PID_SRemoveButton</td> + <td>Remove componentDon't mess with me</td> +</tr> </tbody></table> </body> </html> diff --git a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java index 9e316e77f1..8fdd0fee87 100644 --- a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java +++ b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java @@ -35,6 +35,8 @@ import com.vaadin.shared.ui.JavaScriptComponentState; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.util.Log; import com.vaadin.ui.AbstractJavaScriptComponent; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.HasComponents; import com.vaadin.ui.JavaScriptFunction; @@ -142,9 +144,19 @@ public class BasicJavaScriptComponent extends AbstractTestUI { protected void setup(VaadinRequest request) { addComponent(log); - ExampleWidget c = new ExampleWidget(); + final ExampleWidget c = new ExampleWidget(); c.setCaption("Component caption"); addComponent(c); + + Button removeButton = new Button("Remove component", + new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + removeComponent(c); + } + }); + removeButton.setId("RemoveButton"); + addComponent(removeButton); } @Override diff --git a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentConnector.js b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentConnector.js index b0ece6217d..004d34040e 100644 --- a/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentConnector.js +++ b/uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentConnector.js @@ -35,6 +35,10 @@ window.com_vaadin_tests_components_javascriptcomponent_BasicJavaScriptComponent_ } }); + this.onUnregister = function() { + document.getElementById('RemoveButton').appendChild(document.createTextNode("Don't mess with me")); + }; + this.messageToClient = function(message) { this.messageToServer(message + " processed"); } |