0

私は単一ページのJQueryMobileサイトで作業しています。JSONデータがロードされ、DOMがクライアント側で操作されている間、JQueryの初期化は最初はfalseに設定されます。コンテンツが読み込まれ、DOMが操作された後、JQueryMobileが初期化されます。

初期化したら、Ben AlmanのreplaceTextプラグインを使用して、出力されたHTML内のいくつかのプレースホルダーにJSONをドロップすることを計画しているため、「XXFIRST_NAMEXX」のようなプレースホルダーは「JohnSmith」になります。

ページを読み込んでいる一連のイベントで最後に発生したイベントにもかかわらず、JQuery Mobileのpageshow()イベント内からJSONデータにアクセスできません。

以下は私のコードの簡略化されたコメント付きバージョンです。JQuery1.7.1とJQueryMobile1.1.0を使用しています。ここで何が欠けていますか?ありがとう!

// jQuery Mobile initialization
$(document).bind("mobileinit", function () {
    //prevent JQM from initializing until after content has been loaded in .getJSON callback;
    $.mobile.autoInitializePage = false;
});

$( document ).bind( "pageshow", function( event, data ){
    console.log('pageshow fires'); //fires 4th

    //DROP-INS
    //need to replace text within manipulated and initialized html
    var resplaceScope, strDisplayName, strSchoolName, strOfferTitle; 
    replaceScope = $('body *');
    //collect variables from json data
    strOfferTitle = data.content.offer_vars.offer_title; //ERROR Uncaught TypeError: Cannot read property 'offer_vars' of undefined 
    replaceScope.replaceText( /XXOFFER_TITLEXX/gi, strOfferTitle );
});

$(document).ready(function(){

    console.log('document.ready fires'); //fires 1st

    $.getJSON('io_content.json', function(data) {
        console.log('getJSON fires'); //fires 2st
        getContent(data);
        // ... once code is manipulated by getContent, Jquery is ready to initialize
        $.mobile.initializePage();
    });

    function getContent(data){
        console.log('getContent fires'); //fires 3rd
        // ... code to manipulate content client side before jquery mobile initializes
    }

});
4

2 に答える 2

1

何が起こっているのか完全にはわかりませんが、「pageshow」コールバックに渡される「data」パラメーターが「getJSON」コールバックの「data」変数と同じであると期待している可能性はありますか?それらは、たまたま両方とも「データ」という名前が付けられた異なるオブジェクトです。「pageShow」からのものには、「prevPage」プロパティがあり、そこから移動したばかりのページを表すDOM要素への参照が含まれています。getJSONコールバックの1つには、データソースから取得した実際のデータが含まれています。コールバックの実行が終了すると、コールバックはなくなります。

JSONコールバックでこの初期化のすべてを実行できない場合は、jQueryのdata()関数を使用して、ページ内のDOM要素に必要なJSONのビットを格納してみてください。http://api.jquery.com/jQuery.data/

それは役に立ちますか?

于 2012-07-20T16:26:25.000 に答える
1

data()、またはjqmData()の代わりに使用する必要があるものでこれを行うのに苦労しましたdata()。ドキュメントから:

jQuery Mobileを使用する場合は、jQueryコアのデータメソッドとremoveDataメソッドの代わりにjqmDataとjqmRemoveDataを使用する必要があります(これには、$。fn.data、$。fn.removeData、および$ .data、$。removeData、および$が含まれることに注意してください)。 .hasDataユーティリティ)。名前空間化されたデータ属性の取得と設定が自動的に組み込まれるため(現在使用されている名前空間がない場合でも)。

これを克服するために、getJSONコールバックのLocalStorageにデータを保存し、pageShowからアクセスできるようにしました。

于 2012-07-20T16:29:15.840 に答える