HistoryManager ユーザーコントロールは、URL の変更をリッスンします。変更が発生するたびに、URLChanged イベントをトリガーします。監視対象の URL の変更内容は、# (ハッシュ) の後に示されます。
コントロールの使用
HistoryManager ユーザーコントロールは Work With パターン (TabbedView Web コンポーネント) で広く使用されているコントロールであり、ユーザータブの選択内容に基づいて、ディープリンクを維持したまま GeneXus オブジェクトを動的にロードします。つまり、ブラウザーの戻るまたは進むオプションの状態を維持したまま、リンクをコピーして渡し、別のユーザーがまったく同じページにアクセスできるようにします。
メソッド
URLChanged: URL の変更を通知します。
例
次のような Web パネルの定義があるとします。
Tabs テキストブロックが、3 つのタブ (Start イベント、Init サブルーチン、および DummyTabs サブルーチン) のリストをロードする役割を果たします。
Event Start
Do 'Init'
Do 'DummyTabs'
EndEvent
Sub 'DummyTabs'
&Tabs = new()
for &i = 1 to 3 //タブは 3 つ
&Tab = new()
&Tab.Code = &i.toString().Trim()
&Tab.Description = &i.ToString().Trim()
&Tabs.Add(&Tab)
endfor
&LastTab = &Tabs.Count
EndSub
Sub 'Init'
&TabTemplate = !'<li class="%1">'
&TabTemplate += !'<a id="%2Tab" %3%7 class="%4">'
&TabTemplate += !'<span class="%5">'
&TabTemplate += !'<span class="TabBackground">'
&TabTemplate += !'<span class="TabText">%6</span>'
&TabTemplate += !'</span>'
&TabTemplate += !'</span>'
&TabTemplate += !'</a>'
&TabTemplate +=!'</li>'
EndSub
ユーザーがタブをクリックするたびに、HistoryManager は変更を通知するための URLChanged メソッドをトリガーします。目的のコンテンツを表示するコンポーネントやタブストリップ (タブのリスト) を更新して、選択内容を反映する必要があります (Draw Tabs サブルーチン)。
Event HistoryManager1.URLChanged
msg(format(!"URLChanged, Hash %2 Url %1",HistoryManager1.URL,HistoryManager1.Hash))
Do 'Draw Tabs'
&URLChangedEvent = True // 再表示コードの確認
EndEvent
Event Refresh
If not &URLChangedEvent
Do 'Draw Tabs'
EndIf
EndEvent
Sub 'Draw Tabs'
Do 'FindTabIndex'
&IsFirstTab = True
&TabsMarkup = ""
For &Index = 1 To 3
&Tab = &Tabs.Item(&Index)
Do 'LoadItem'
&IsFirstTab = False
Endfor
Tabs.Caption = Format(!'<ul class="Tabs">%1</ul>', &TabsMarkup)
EndSub
Sub 'FindTabIndex'
//指定したコードがあるタブを検索// 見つからない、またはコードが空の場合、最初のタブに戻る&Found = False
For &Index = 1 to &Tabs.Count
If (HistoryManager1.Hash = "" And (&Tabs.Item(&Index).Code = &TabCode)) Or (&Tabs.Item(&Index).Code = HistoryManager1.Hash)
&SelectedTab = &Index
&Found = True
Exit
EndIf
EndFor
If (not &Found and &Tabs.Count > 0)
&SelectedTab = 1
EndIf
EndSub
Sub 'LoadItem'
&TabLeftCls = !"TabLeft"
if &Index = &FirstTab
&TabLeftCls = !"TabFirst"
EndIf
&TabRightCls = !"TabRight"
If &Index = &LastTab
&TabRightCls = !"TabLast"
EndIf
If &Index = &SelectedTab
&TabsMarkup += Format(&TabTemplate, !"Tab TabSelected", &Tab.Code, "", &TabLeftCls, &TabRightCls, &Tab.Description, "")
Else
//この項目を HistoryManager のエントリーポイントとして追加し、ブラウザーが前後のページに移動できるようにする &OnClickTemplate = !' onclick="return HistoryManager.AddHistoryPoint(' + !"'%1'" + !')"' &TabsMarkup += Format(&TabTemplate, !"Tab", &Tab.Code, Format(!'href="%1"', &Tab.Link), &TabLeftCls, &TabRightCls, &Tab.Description, Format(&OnClickTemplate, &Tab.Code))
EndIf
EndSub
実行時には、3 つのタブが作成されます:
各タブをクリックすると、&Tab.Code の値 (#1、#2、#3) でハッシュタグが更新されます。
|