2017-01-31 8 views
1

私は、ajax経由で子ページを読み込むメインページを持っています。子ページが閉じられると、グローバルスコープのコールバック関数が実行され、たとえば、何らかの方法でメインページの内容を更新することができます。関数式のパラメータリストでjquery式を評価する方法

私は、子ページ自体がコールバック関数を定義する必要がある状況に遭遇しました。なぜなら、それが閉じるときに何が行われる必要があるかを知る唯一の場所であるからです。

この例では、コールバック関数はパラメータを受け付ける別の関数のクロージャであり、パラメータは子ページの要素を使用するjquery式から派生します。

問題は、コールバック関数が実行されるまでに子ページがアンロードされているため、囲まれた関数のパラメータリストが評価されるときにjqueryが対象要素を見つけることができません。

グローバルスコープの一時変数を使用してこの問題を回避することはできましたが、ページがメモリに残っている間にjquery式の評価を強制的に強制します。

動作しませんセットアップの擬似コードの例:

main-page: 

callback = null; 
newcallback = some_function; 

function open-child(newcallback) { 
    callback = newcallback; 
    //load child page 
}; 

function close-child(){ 
    //unload child page 
    callback(); 
} 

child-page: 
child-page-element 
callback = function() { 
    some_action($("#child-page-element").data("id")); 
}; 
close-child(); 

グローバル変数を追加することで、私はこの作業を行うことができます。

child-page: 
child-page-element 
global_var = $("#child-page-element").data("id"); 
callback = function() { 
    some_action(global_var); 
}; 
close-child(); 

質問:

  1. jqueryパラメータを評価するためにjqueryパラメータを書き留めてもよろしいですか?

  2. もっと良い方法がありますか?

答えて

1

さて、あなたは次のようにコールバックを作成します(そしてそのデータを収集)子ページの機能を作ることができる:

main-page: 
function open-child(createCallback) { 
    callback = createCallback(); 
} 

child-page: 
createCallback = function() { 
    var id = $("#child-page-element").data("id"); 
    return function() { 
     some_action(id); 
    }; 
}; 
+1

これは思考に私を得たので、私は私の作業例ではglobal_varを変更しましたvar global_var(それはローカルvarになります)と私はページをアンロードしていると、すべてのページオブジェクト(var global_varを保持するものを含む)をnullにするにもかかわらず、それは動作します....私は今コールバック関数は、データが失われたjqueryのコピーがある前に、データのコピーが作成されました。 – kpg