9

私は深刻な頭痛に悩まされています.最後の数時間、ページ間をフリックすると(ajaxによって動的に読み込まれる)、スタイリングがすべて行われる理由がわかりません.

私はこれについてネット上の何十もの投稿を読み、 .page() trigger("Refresh") trigger create などを試しました。

ページ 1 にはリストがあり、アイテムをクリックすると、別のリストの完全なコンテンツが取得され、それらが DOM に配置されます。

JQuery バージョン (モバイル 1.1rc2 - ただし、1.0.1 安定版と同じ問題):

<script src="scripts/ajax.js"></script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.css">

このリンクは最初のリストでクリックされます:

javascript:GetGarageList("G9236")

トリガー:

// show garages for factor
function GetGarageList(accNo) {
    $.mobile.showPageLoadingMsg("b", "Loading", false);
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetGarageList",
        data: "{'accNo':'" + accNo + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            $("#garageList").html(msg.d);
            $.mobile.changePage("#garageList");
        },
        error: function () {
            ShowError("Error :(");
        },
        complete: function () {
            $.mobile.hidePageLoadingMsg();
        }
    });
};

最初の読み込みでは、2 ページ目が完璧に見えます。

ここに画像の説明を入力

しかし、戻るボタンを上に押すと。次に、別のリンクをクリックします。

javascript:GetGarageList("G9336")

ビューがめちゃくちゃになります:

ここに画像の説明を入力

助けてください!

編集 :

他の人は .trigger("create"); を使用しています。彼らが問題を解決したと言う...しかし、私はそれを私のコードに次のように追加するたびに:

$("#garageList").html(msg.d).trigger("create");

また

$("#garageList").html(msg.d);
$("#garageList").trigger("create");

それは私にロードスピナーを永遠に与えるだけです。

編集2:

以下のバーンズの提案に従って、html を次のように変更しました。

    <%--Garage List--%>
    <div data-role="page" id="garageList" data-add-back-btn="true" data-theme="a">
        <div data-role='header' data-position='fixed'>
            <h1>Garages</h1>
            <a href='index.html' data-icon='plus' data-iconpos='notext' class='ui-btn-right' data-theme='b'></a>
        </div>
        <div data-role='content' id="abc">
            <ul data-role='listview' id='xyz' data-filter='true' data-filter-theme='a' data-filter-placeholder='search name or account no...' data-split-icon='info' data-split-theme='a'>

/// --> new content goes here... as simply many <li> items.

</ul>
        </div> <!-- /content -->
    </div> <!-- /page -->

それから私は(ajaxの成功で)試しました:

            $("#xyz").empty();
            $("#xyz").html(msg.d);
            $("#abc").listview("refresh");
            $.mobile.changePage("#garageList");

            $("#xyz").html(msg.d);
            $("#xyz").listview("refresh");
            $.mobile.changePage("#garageList");

HERE は msg.d のサンプル出力です:

"<li><a href='javascript:GetGarageDetails(16267)'><h3>A KETCHEN MOTOR ENGINEERS</h3><p><strong>MID LOTHIAN</strong></p></a><a href="javascript:GetFactorDetails('16267')"></a></li>

<li><a href='javascript:GetGarageDetails(16328)'><h3>G.A.AUTOS</h3><p><strong></strong></p></a><a href="javascript:GetFactorDetails('16328')"></a></li>

<li><a href='javascript:GetGarageDetails(16262)'><h3>GARRY HENDERSON MOTOR ENGINEERS</h3><p><strong>WEST LIMTON</strong></p></a><a href="javascript:GetFactorDetails('16262')"></a></li>

<li><a href='javascript:GetGarageDetails(16264)'><h3>LEADBURN GARAGE LTD</h3><p><strong>PEELBLESHIRE</strong></p></a><a href="javascript:GetFactorDetails('16264')"></a></li>

<li><a href='javascript:GetGarageDetails(16315)'><h3>LOTHIAN MOTORS</h3><p><strong></strong></p></a><a href="javascript:GetFactorDetails('16315')"></a></li>

"

および他のバリエーションですが、それでも再生したくありません(リフレッシュ時にスピナーが永遠に続きます)...少し改善されましたが(リフレッシュを外すと):

ここに画像の説明を入力

4

6 に答える 6

15

これは私の問題をすべて解決してきました。

$('...').trigger('create');

セレクターに配置する適切な要素を見つけるだけです。

私にとって、これらの行はうまくいきました:

$(document).bind('pagechange', function() {
  $('.ui-page-active .ui-listview').listview('refresh');
  $('.ui-page-active :jqmData(role=content)').trigger('create');
});
于 2012-04-14T19:57:09.207 に答える
4

listview('refresh')ページを変更した後に配置すると、問題が解決しました。

$.mobile.changePage("#catalog");

$('#list_included_in_catalog_page').listview('refresh');
于 2012-05-21T15:28:18.357 に答える
0

すべてを試した後、個別の.aspxページを使用するという理想的とは言えない解決策に落ち着きました。

しかし、これには、ページ間の URL でパラメーターを渡す必要があるという問題がありました (セキュリティ リスク)。

したがって、使用する代わりに:

javascript:GetGarageList("G9236")

代わりに GUID を使用するようになりました。

http://localhost:54419/GarageList.aspx?id=319d8819-11ae-446f-b373-50d08e06159a

C# ページ読み込みイベントで新しいページを生成します。

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("<div data-role='page' id='garageList' data-add-back-btn='true' data-theme='a'>");
        Response.Write("<div data-role='header' data-position='fixed'>");
        Response.Write("<h1>Garages</h1>");
        Response.Write("<a href='index.html' data-icon='plus' data-iconpos='notext' class='ui-btn-right' data-theme='b'></a>");
        Response.Write("</div>");

        Response.Write("<div data-role='content'>");
        Response.Write("<ul data-role='listview' data-filter='true' data-filter-theme='a' data-filter-placeholder='search name or account no...' data-split-icon='info' data-split-theme='a'>");

        if (!string.IsNullOrEmpty(Request.QueryString["id"]))
        {
            Guid guid = Guid.Parse(Request.QueryString["id"]);
            using (DbContext db = new DbContext())
            {
                var f = db.Factors.Where(x => x.Guid == guid).SingleOrDefault();
                if (f != null)
                {
                    foreach (var g in f.Garages.OrderBy(x => x.Name))
                    {
                        Response.Write(String.Format("<li><a href='javascript:GetGarageDetails({0})'><h3>{1}</h3><p><strong>{2}</strong></p></a><a href='#' /></li>", g.Guid, g.Name, g.Town));
                    }
                }
            }
        }

        Response.Write("</ul>");
        Response.Write("</div>");
        Response.Write("</div>");
    }

これはかなりうまく機能しますが、ページ遷移の後でも前のページの残りが画面に残っていることに気付きました。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GarageList.aspx.cs" Inherits="CP.GarageList" %>

今私が直面している問題は、モバイル デバイスでページが非常に遅いことです。

于 2012-04-12T09:28:00.023 に答える
0

リストを更新する必要があります。例えば)

$('Some DiV').listview('refresh');
于 2012-04-26T14:49:53.353 に答える
0

jquery mobile の他のページへの呼び出しは ajax を使用しているため、スタイルやライブラリをロードするときにエラーが発生することがあります。

外部ページのリダイレクトを使用するときは、window.location.href.

考えられる解決策は、ファイルのヘッダーでリンクと JavaScript を正しく並べることです。次に例を示します。

<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
<link rel="stylesheet" href="jquery_mobile/jquery.mobile-1.4.5.min.css" />
<link rel="stylesheet" href="jquery_mobile/jquery.mobile.structure-1.4.5.min.css" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<script type="text/javascript" src="jquery_mobile/jquery-1.12.4.js"></script>
<script type="text/javascript" src="jquery_mobile/jquery.mobile-1.4.5.min.js"></script>
<title>my page</title></head>
于 2016-12-22T21:57:00.990 に答える
0

それ以外の

success: function (msg) {
    $("#garageList").html(msg.d);
    $.mobile.changePage("#garageList");
} 

行う

success: function (msg) {
    $("#abc").html("&lt;ul data-role='listview' id='xyz' data-filter='true' data-filter-theme='a' data-filter-placeholder='search name or account no...' data-split-icon='info' data-split-theme='a'&gt; " + msg.d + "&lt;ul&gt;");
    $.mobile.changePage("#garageList");
    $("#abc").find(":jqmData(role=listview)").listview();
}
于 2012-04-11T10:15:21.787 に答える