2

私は現在、jQuery、jQuery mobile、および多くのXMLを使用するPhoneGapアプリケーションに取り組んでいます。これに取り組み始めた人はもういないので、これは私に渡されました(しかし、私はそれには入りません)。さて、概要... XMLファイルから読み取り、返されたデータを使用して、利用可能な製品の画像と情報を挿入するページがあります。ユーザーがこれらの画像の1つをクリックすると、ダイアログが表示されます...これは簡単です。次を使用するだけです(ダイアログはページ内のdivであり、個別のファイルではありません)

$('#entry_level_phones img').live("click", function(){
    $.mobile.changePage("#popupEntry", { role: "dialog"});    
});

さて、これを拡張したいので、特定の画像をクリックすると、同じXMLファイルを読み取り、選択した製品に関する詳細情報を取得します。この情報はフォーマットされ、innerHTMLとしてダイアログdivに挿入され、表示されます...そのようなもの...

$('#entry_level_phones img').live("click", function(){
    // I know the ID of what was clicked using this.id!
    $.ajax({
        type : 'GET',
        url : 'hardware.xml',
        dataType : 'xml',
        success : getProduct(this.id)
    });
});

function getProduct(productID){

    productContent = "";
    // code to parse through XML and format using the passed productID to locate the relevent info 
    productContent = outFromParsingData;
    $("#popupEntry").html(productContent); 
    $.mobile.changePage("#popupEntry", { role: "dialog", "test":"test" });    
}

ここで問題となるのは、関連するID(this.id)を成功コールバックに渡す必要があることです。通常は、関数名を指定するだけで、ajax呼び出しから返されたxmlが渡されます(方法と理由はまだわかりません)。

success : getProduct // this is ajax call

getProduct(xml) // here's the returned xml passed as an argument 

上記の修正により、返されたXMLを読み取ることはできますが、選択したIDがありません...最後に質問です... idとxmlをgetProduct関数に渡すにはどうすればよいですか?どうもありがとう。

4

1 に答える 1

0

画像がクリックされるたびに同じXMLをリロードするというあなたのアプローチは、私にはかなり非効率に聞こえます。画像と関連コンテンツを作成するためにXMLを既にロードしている場合は、データ属性を使用して各画像に関連付けられた関連情報を要素自体に保存するか、XMLデータを変数に保存する方が意味がありません。画像がクリックされたときにIDで関連するエントリを検索しますか?

しかし、質問に答えるために、リクエスト内でハンドラーを定義すると、クロージャを使用でき、クリックハンドラーのスコープ内で宣言された変数がAJAXハンドラーのスコープ内で使用可能になります。

$('#entry_level_phones img').live("click", function() {
    var $this = $(this);     
    $.ajax({
        type : 'GET',
        url : 'hardware.xml',
        dataType : 'xml',
        success : function(data) {
             // $this should be within scope here
             console.log($this);
        }
    });
}
于 2012-07-12T15:48:52.437 に答える