2

WebSharper アプリで適切な戻るボタンのサポートを得ようとしています。履歴に問題なく入れることができます:

type MyRecord = { foo: int; bar: string } 
JS.Window.History.PushState({foo=10; bar="hello"}, "", "mysuffix")

onpopstate次のようなことを行うことで、対応するハンドラーを追加したいと考えていました。

JS.Window.Onpopstate <- (fun e -> Javascript.Console.Info e.State.bar)

残念ながら、このイベントには型があり、状態を取得するためのフィールドがJs.Window.Onpopstate : Dom.Event -> Unit ありDom.EventませんState。対応する「実際の」Javascript イベントにはありますが。

ハンドラーに保存さPushStateれている状態にアクセスするにはどうすればよいですか?Onpopstate

4

2 に答える 2

2

dynamic operator を使用して、オブジェクトから任意のフィールドにアクセスできます?

JS.Window.Onpopstate <- (fun e ->
    Console.Info e?state.bar
)

ただし[<Inline>]、任意のメソッドを呼び出すには引き続き を使用する必要があることに注意してください。

于 2015-05-15T16:27:16.177 に答える
0

次のように、任意の Javascript から値を取得できることがわかりました。

[<Inline "$e.state">]
let stateOf (e : JavaScript.Dom.Event) = 
   Unchecked.defaultof<MyRecord>

onpopstateハンドラーを作成できるようになりました。

JS.Window.Onpopstate <- (fun e -> 
  Javascript.Console.Info ((stateOf e).bar)
)

警告は、ネストされたレコード、クラス型の引数、およびセットをPushState一般的に指定すると機能しないことです。ブラウザは、渡されたもののうち、JSON でシリアライズ可能な部分のみを保存する義務がありますPushState。前述のすべての型は Javascript オブジェクトとして実装されます。

于 2015-05-13T15:42:55.333 に答える