1

を使用してあるページから別のページ (単一ページ テンプレート) に移動しようとしているときに、 JQM 読み込みメッセージが表示されるようにするにはどうすればよいchangePage("$('#page-id')", { transition: "none" });ですか?

今のところ、$.mobile.loading("show");changePageが発生する前に呼び出します。

thisthisの方法を試しましたが、まだ機能しません。ソースページのボタンをクリックしてchangePageを使用しています。上記のリンクで提供されている方法は、FF でのみ機能します。Android、iOS ネイティブ ブラウザ、Chrome または Safari では機能しません。

ああ、私は JQM v1.2.0 安定版を使用しています。

編集: 使用しているコードはこちら

$(".listview").live("click", function () {
     $.mobile.loading('show', {
        text: 'Please wait... Loading...',
        textVisible: true,
        theme: 'a',
        textonly: true
    });
    var v1= $(this).attr("v1");
    //var CourseID = "";
    var v2= $(this).attr("v2");
    var v3= $.trim($(this).children("h3").text());
    var v4= $.trim($(this).find("span").children("span:first").text());
    var v5= $.trim($(this).children("p:last").text());
    $.ajax({
            async: false,
            type: "POST",
            url: "//url of the webmethod//",
            data: "{v1:" + v1+ ", p:" + id + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            success: function (msg) {
                ViewModel.variable1({ //binding data to ViewModel here//
                });
                $.mobile.changePage("#course-pg", { transition: "none" });
            },
            error: function (msg) {
                $("#errorpopup").popup('open');
            },
            complete: function () {
                $.mobile.loading('hide');
            }
        });
});
4

2 に答える 2

1

これもずっと考えていました。

問題は、スピナーを呼び出し、changePage を呼び出して、すべてを行っている可能性があるということです... 問題は (私の観点では)、スピナーのみが表示され、表示while the page is loadingされないことwhile the loaded page is renderingです。gzip で圧縮された 2k のページをロードしたとします。実際にはロードが速すぎて、スピナーが表示されません。読み込まれるウィジェットによっては、拡張にかなりの時間がかかるため、スピナーはmsページの読み込み時に表示されますが2-3 seconds、ページのレンダリングでは表示されません。

私はこのような独自のスピナー呼び出しを使用しています(JQM 1.1):

var spin = 
    function( what ){
        if ( what == "show"){
            console.log("SHOWIN");
            $.mobile.showPageLoadingMsg();
            } else {
            console.log("HIDING");
            $.mobile.hidePageLoadingMsg()
            }
        };

これをコードに入れ、次のように changePage 呼び出しを行う前に手動でトリガーします。

 spin("show");

コールバック、または後で使用するハンドラーで、

 spin("hide");

これにより、スピナーがいつ表示され、いつ終了するかがわかります。

ご参考までに、レンダリング中にスピナーが表示されることを願っています。それははるかに便利ですが、これが可能かどうかはわかりません。

于 2012-10-06T21:39:01.660 に答える
0

私はついにこの問題を解決する方法を見つけました。その文字通り非正統的であり、なぜこれが唯一の方法であったのか私にはわかりません。とにかく、ここに行きます。2ページ目に設定したアンカータグを作成し、hrefcssを使用して非表示にしました。

<a href="#page-id" id="linktonext" style="display:none">Click here</a>

私は最初に持っていて$.mobile.loading("show");、ajax呼び出しがデータを取得した後、このアンカータグへのトリガークリックが発生します。2pageinit番目のページで、ajax呼び出しからのデータをページに入力します。この後、と呼びます$.mobile.loading("hide")。完璧に動作します。

于 2012-10-23T20:43:15.687 に答える