ここにテストケースがあります: http://tremby.net/knockouttest/page1.php
ページ遷移にはpjaxを使用しています。上記のテスト ケースのページ 1 とページ 2 の間をクリックすると、2 つのページが非同期に読み込まれ、#main
要素のコンテンツが置き換えられます。その過程でブラウザーの履歴状態がプッシュされるため、ロケーション バーの URL が更新され、戻るボタンで元の場所に戻るはずです。
1 ページ目のリストには、ノックアウトのforeach
バインディングと、List
私が定義したモデル (ヘッドのインライン スクリプト内) が取り込まれています。1ready
ページ目では、インライン スクリプトが実行ko.applyBindings
され、リストにデータが入力されます。
「アイテムの追加」ボタンはビューモデルにアイテムを追加し、ノックアウトはリストに追加します。
いくつかの項目を追加してからページ 2 に移動し、次にページ 1 に戻ると、リストは最初の 3 つの項目で新しくなり、項目の追加ボタンは引き続き機能します。これは、私たちのユースケースでは問題ありません。
いくつかの項目を追加してからページ 2 に移動しますが、ブラウザの [戻る] ボタンを使用してページ 1 に戻るのは、私の問題です。新しいアイテムは引き続き表示されます (これは良いことであり、ブラウザーの戻るボタンを使用する場合のユース ケースに不可欠です) が、「アイテムの追加」ボタンは壊れています。新しい項目を にプッシュするコードobservableArray
は確実に実行されていますが、バインディングが消えているようで、ノックアウトは新しい DOM 要素を追加することを認識していません。
ko.applyBindings
で機能を再度実行することはできませんpopstate
。または、ノックアウトは、リスト内の各アイテムに対して現在存在する各アイテムを複製したいと考えるようになり、その後、「アイテムを追加」をクリックするたびに複数の新しいアイテムが得られます。
明らかに欠けているものがあると強く感じていますが、ドキュメントで役立つと思われるものは何も見つかりません。どんな助けでも大歓迎です。