0

新しいウィンドウで別のビューを起動するグリッドのあるビューがあります。親ビューはデータを子ビューに渡す必要がありますが、データがかなり大きいため、クエリ文字列として渡すことはできません。ネイティブモーダルを使用できません。私はwindow.openを使用しているだけで、カスタムモーダルコンテキストを作成していません。

1.以下のコードのようなものを使用して、新しいウィンドウに非表示のフィールド要素を入力しようとしました

var popup = window.open('/#/viewname');
popup.onload=function(){document.findbyid('hiddenfield')= newvalue };

durandal での読み込みを表示するためにスプラッシュ ページを使用しています。ルーターがまだナビゲートしている新しいウィンドウの onload であり、スプラッシュ ページ ドキュメントを取得します。

2.子ビューで親ビューを要求してから、以下のコードのようなものを使用して親ビューデータを取得しようとしました

define(['viewmodels/parent'],function ('parent'){

function activate(){
localvariablevalue= parent.observable;



}

return{
activate:activate
}

});

私は未定義としてparent.observableを取得します。これは新しいウィンドウであるため、文脈から外れている可能性が高いです。

3.シングルトンglobal.jsファイルを試して、親と子の両方でそれを要求しましたが、そのアプローチでも未定義になるため、コンテキストも失われていると思います

これを達成する方法についてのアイデア.. v 1.2 を使用して達成できる場合は? カスタム モーダル コンテキストを作成することで実現できる場合は、新しいウィンドウの addContext 関数を定義する方法について、誰かがいくつかの指針を示すことができます。

4

2 に答える 2

1

最初の SPA とは関係のない SPAwindow.openの独立したインスタンスを使用することによって作成されます。本当に新しいウィンドウを開く必要がある場合は、 localstorage#/viewnameなどのウィンドウ間で情報を交換する他の方法を検討する必要があります。

ただし、要件を再考し、代わりにモーダルで目標を達成できないかどうかを確認することをお勧めします。

コメントに基づいて編集: これはデュランダルがコンテキストを失うこととは関係ありませんwindow.open。同じセッションで開かないことです。例を参照してくださいwindow.open は同じセッションで開きません

Edit2別の方法として、#/viewname2 番目のウィンドウでパラメーターを使用vm.activateして、サーバーから直接 (該当する場合)、または最初のブラウザーから localstorage や sessionstorage などの Web ストレージ経由でデータを取得することもできます。

Edit3単独で実行できるかどうかを確認する簡単なテストを行いwindow.openました。Firefox/Firebug でテスト済み。これがクロスブラウザーで機能することを確認するために、webstorageへのリンクをチェックアウトすることをお勧めします。

http://dfiddle.github.io/dFiddle-1.2/#/に移動し、コンソールを開いてグローバル変数を作成します。

window.myVar = {complex: true};

新しいウィンドウを作成する

var myWindow = window.open('http://dfiddle.github.io/dFiddle-1.2/#/view-composition');

最初のコンソールに戻り、myWindow にプロパティ myvar を作成します

myWindow.myVar = myVar;

2番目のウィンドウのコンソールに変更して確認します

myVar // output {complex: true}

activate私が提案した別の方法では、2 番目のウィンドウに渡す一意のハッシュ値を使用し、コールバックの一部として複雑なデータ (クエリ文字列として追加できる) を取得します。データは、サーバーまたは Web ストレージ経由で保存できます。

于 2013-07-05T10:35:57.477 に答える