Browse Source

Allow JavaScriptConnectors to get unRegister events (#9292)

Change-Id: Ie9e11810df6484e34d3895be175d6a180911252f
tags/7.0.0.beta10
Leif Åstrand 11 years ago
parent
commit
62eff6b816

+ 13
- 9
client/src/com/vaadin/client/JavaScriptConnectorHelper.java View File

@@ -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);
}
}-*/;

}

+ 6
- 0
client/src/com/vaadin/client/JavaScriptExtension.java View File

@@ -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();
}
}

+ 6
- 0
client/src/com/vaadin/client/ui/JavaScriptComponentConnector.java View File

@@ -54,4 +54,10 @@ public final class JavaScriptComponentConnector extends
public JavaScriptComponentState getState() {
return (JavaScriptComponentState) super.getState();
}

@Override
public void onUnregister() {
super.onUnregister();
helper.onUnregister();
}
}

+ 10
- 0
uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.html View File

@@ -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>

+ 13
- 1
uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponent.java View File

@@ -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

+ 4
- 0
uitest/src/com/vaadin/tests/components/javascriptcomponent/BasicJavaScriptComponentConnector.js View File

@@ -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");
}

Loading…
Cancel
Save