HistoryPopStateEvent"

From Documentation
m (correct highlight (via JWB))
 
(One intermediate revision by the same user not shown)
Line 15: Line 15:
 
= Example =
 
= Example =
 
The example shows how to push a history state and handle a <code>HistoryPopStateEvent</code> object.
 
The example shows how to push a history state and handle a <code>HistoryPopStateEvent</code> object.
<source lang="xml" high="6">
+
<source lang="xml" highlight="6">
 
<zk>
 
<zk>
 
   <tabbox id="tb" height="300px">
 
   <tabbox id="tb" height="300px">
Line 51: Line 51:
  
 
You can handle events in an MVC fashion.
 
You can handle events in an MVC fashion.
<source lang="java" high="5">
+
<source lang="java" highlight="5">
 
public class TestComposer extends SelectorComposer<Tabbox> {
 
public class TestComposer extends SelectorComposer<Tabbox> {
 
   @Wire
 
   @Wire
Line 68: Line 68:
  
 
Or you can use a special annotition <javadoc type="interface">org.zkoss.bind.annotation.HistoryPopState</javadoc> if you prefer MVVM.
 
Or you can use a special annotition <javadoc type="interface">org.zkoss.bind.annotation.HistoryPopState</javadoc> if you prefer MVVM.
<source lang="java" high="14">
+
<source lang="java" highlight="14">
 
public class TestVM {
 
public class TestVM {
 
   private int selectedIndex = 0;
 
   private int selectedIndex = 0;
Line 96: Line 96:
 
=Supported events=
 
=Supported events=
  
{| border="1" | width="100%"
+
{| class='wikitable' | width="100%"
 
! <center>Name</center>
 
! <center>Name</center>
 
! <center>Event Type</center>
 
! <center>Event Type</center>
Line 110: Line 110:
 
=Use cases=
 
=Use cases=
  
{| border='1px' | width="100%"
+
{| class='wikitable' | width="100%"
 
! Version !! Description !! Example Location
 
! Version !! Description !! Example Location
 
|-
 
|-
Line 120: Line 120:
 
=Version History=
 
=Version History=
  
{| border='1px' | width="100%"
+
{| class='wikitable' | width="100%"
 
! Version !! Date !! Content
 
! Version !! Date !! Content
 
|-
 
|-

Latest revision as of 09:23, 18 January 2022


HistoryPopStateEvent

HistoryPopStateEvent

Employment/Purpose

The history pop state event used with onHistoryPopState to notify that user pressed BACK, FORWARD or others that causes the history changed (but still in the same desktop).

All root components of all pages of the desktop will receives this event.

Example

The example shows how to push a history state and handle a HistoryPopStateEvent object.

<zk>
  <tabbox id="tb" height="300px">
    <attribute name="onSelect"><![CDATA[
      Tab selected = event.getReference();
      int selectedIndex = selected.getIndex();
      desktop.pushHistoryState(Collections.singletonMap("tabIndex", selectedIndex), "", "/" + selectedIndex);
    ]]>
    </attribute>
    <attribute name="onHistoryPopState"><![CDATA[
      Map state = event.getState();
      if (state != null)
        tb.setSelectedIndex(state.get("tabIndex"));
    ]]>
    </attribute>
    <tabs id="tabs">
      <tab id="A" label="Tab A" />
      <tab id="B" label="Tab B" />
      <tab id="C" label="Tab C" />
      <tab id="D" label="Tab D" />
      <tab id="E" label="Tab E" />
    </tabs>
    <tabpanels>
      <tabpanel>This is panel A</tabpanel>
      <tabpanel>This is panel B</tabpanel>
      <tabpanel>This is panel C</tabpanel>
      <tabpanel>This is panel D</tabpanel>
      <tabpanel>This is panel E</tabpanel>
    </tabpanels>
  </tabbox>
</zk>

You can handle events in an MVC fashion.

public class TestComposer extends SelectorComposer<Tabbox> {
  @Wire
  private Tabbox tb;
  
  @Listen("onHistoryPopState = #tb")
  public void handleHistoryPopState(HistoryPopStateEvent event) {
    Map state = (Map) event.getState();
    if (state != null) {
      tb.setSelectedIndex((int) state.get("tabIndex"));
    }
  }
}
  • Line 5: Listen the onHistoryPopState event of the root component #tb.

Or you can use a special annotition HistoryPopState if you prefer MVVM.

public class TestVM {
  private int selectedIndex = 0;
  
  public int getSelectedIndex() {
  	return selectedIndex;
  }
  
  public void setSelectedIndex(int index) {
    selectedIndex = index;
    Desktop desktop = Executions.getCurrent().getDesktop();
    desktop.pushHistoryState(Collections.singletonMap("tabIndex", selectedIndex), "", "/" + selectedIndex);
  }

  @HistoryPopState
  @SmartNotifyChange("selectedIndex")
  public void handleHistoryPopState(@ContextParam(ContextType.TRIGGER_EVENT) HistoryPopStateEvent event) {
    Map state = (Map) event.getState();
    if (state != null) {
      selectedIndex = ((int) state.get("tabIndex"));
    }
  }
}
  • Line 14: a method annotated with HistoryPopState can handle HistoryPopStateEvent.

Supported events

Name
Event Type
None None

Supported Children

*NONE

Use cases

Version Description Example Location
     

Version History

Version Date Content
8.5.0 Oct 2017 ZK-3711: Support HTML5 history API


Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.