8

私はstackoverflowを検索しましたが、プログラムでjqmページを変更し、(get)パラメーターを渡すための適切な解決策が見つかりませんでした。私はjqmを初めて使用するので、changePage()関数を使用してデータを渡すときに何か問題が発生する可能性があります。

jquerymobile1.1.1およびjquery1.8.0を使用する

リストがあり、すべてのアイテムが同じ#profileページを指すようにします。そのページで、ajax/jsonを使用して適切なデータをロードしたいと思います。

<ul data-role="listview" data-theme="a">
   <li><a href="#profile">Martin</a></li>
   <li><a href="#profile?id=2">Johnny</a></li>   
   <li><a href="#" onclick="changePage()">Luke</a></li>
</ul>

最初のリンクは機能していますが、IDは渡されません(明らかに)

2番目のリンクが機能しないと例外がスローされます(クロム):キャッチされないエラー:構文エラー、認識されない式:#profile?id = 3

3番目のリンクはこの関数を使用します:

function changePage() {
            $.mobile.changePage("#profile", { data: {id:1} });
            //alert('page changed.'); 
            return false;
        }

ページを変更しますが、URLはbasefile.html?id = 1ですが、basefile.html#profile?id=1である必要があります

誰かがそれを手伝うことができますか?どうもありがとう。

4

2 に答える 2

16

jQuery Mobile Docsで説明したように、jQuery Mobileは内部/埋め込みページへのクエリパラメーターの受け渡しをサポートしていませんが、この機能をサポートするためにプロジェクトに追加できるプラグインが2つあります。軽量のページパラメータプラグインと、backbone.jsまたはspine.jsで使用するためのより完全な機能を備えたjQueryMobileルータープラグインがあります。

異なるページで渡されるデータを実装する方法は他にもありますが、古いWebブラウザーではサポートされていない方法もあります。複数のブラウザーでのアプリケーションの相互運用性に影響を与えないように、実装方法を慎重に選択する必要があります。

Web Storageを使用して、異なるページ間でデータを渡すことができます。

W3schoolsサイトで述べたように、HTML5 Webページを使用すると、ユーザーのブラウザー内でデータをローカルに保存できます。以前は、これはCookieを使用して行われました。ただし、WebStorageはより安全で高速です。データはすべてのサーバー要求に含まれているわけではありませんが、要求された場合にのみ使用されます。ウェブサイトのパフォーマンスに影響を与えることなく、大量のデータを保存することも可能です。データはキーと値のペアで保存され、Webページはそれ自体で保存されたデータにのみアクセスできます。Webストレージは、Internet Explorer 8以降、Firefox、Opera、Chrome、およびSafariでサポートされています。Internet Explorer 7以前のバージョンは、Webストレージをサポートしていません

クライアントにデータを保存するための2つのオブジェクトがあります。

  • 有効期限なしでデータを保存するlocalStorage
  • 1つのセッションのデータを格納するsessionStorage

例:

ローカルストレージの例:

ページ1:localStorage.carType = "test";
Page2では、localStorage.carTypeを使用してcarTypeを取得できます。

セッションストレージの例:

ページ1:sessionStorage.carNumber = 10;
Page2では、sessionStorage.carNumberを使用してcarTypeを取得できます。

あなたの場合、考えられる解決策は、各アンカーにIDを追加することです。次に、クリックイベントをキャッチし、IDを取得し、IDをWebストレージに保存して、ページ遷移を実行します。次のページで、WebストレージからIDを取得します。以下に実装を見つけることができます:

<ul id="menu_list" data-role="listview" data-theme="a">
   <li><a id="1" href="#">Martin</a></li>
   <li><a id="2" href="#">Johnny</a></li>   
   <li><a id="3" href="#">Luke</a></li>
</ul>


$('#menu_list').children().each(function(){
    var anchor = $(this).find('a');
    if(anchor)
    {
        anchor.click(function(){
            // save the selected id to the session storage and retrieve it in the next page
            sessionStorage.selectedId=anchor.attr('id');
            // perform the transition
            changePage();
        });
    }
});

編集:

複数ページのアプローチに従うときにパラメータを渡す別の方法

この例ではjQM changePage()、Ajaxページリクエストでデータを送信するために使用します。

$('#list-d a').on('click', function(e) {
    e.preventDefault();
    $.mobile.changePage('car-details.html', {
        data: {
            id: this.id
        }
    });
});

構築されたURLは.../car-details.html?id = my-id

完全な例については、このStackOverflowの回答を確認してください

これがお役に立てば幸いです。

于 2012-08-21T17:10:01.687 に答える
3

この質問はすでに回答されており、その回答についてコメントが交換されていることがわかります。私もこの問題に直面しています。意図したとおりにjQueryMobileを使用すると、ajaxの読み込みが可能になるため、ユーザーからの指示がない限り、ブラウザーを更新する必要はありません。また、ユーザーが何らかの理由で更新している場合、それは、ほとんどのユーザーがイライラする原因なしに更新しないため、サイトまたはアプリが期待どおりに機能していないことを意味します。

そう言うと、コメントで示唆されているように、変数を作成することは、「ページ」から「ページ」にデータを渡す効率的な方法です。ただし、そうすることでの私の提案は、代わりにサイト情報を含むグローバル変数を作成することです。

$('#elemControlToChangeBy').on("tap", function(oEvent)
{
   oMyNameSpace.PageDataObj = oDataObj;

   $.mobile.changePage("#elemPage", {transition : "type"})
});

$("elemPage").on("pageshow", function()
{
   var oDataObj = oMyNamespance.PageDataObj;

   //Use the data...
});

明らかに、コードはコーディング規約に合わせて変更する必要がありますが、概念は次のとおりです。

  • データを保存するか、他の方法でアクセスします
  • 外部コードによる上書きを防ぐために、含まれている変数にデータを配置します
  • 次のページに到達したら、データオブジェクト変数にアクセスします

すでに述べたように、他のルート(ローカルストレージなど)もあるので、情報がすでにあるので、それについては触れません。

上で述べたように、私はこの問題に遭遇しました。私の提案は、jQuery Mobileを意図したとおりに使用し、独自のコードベースを使用して、整理されたオブジェクト階層を使用して変数を作成および格納することです。それをどのように編成するかはあなたの選択であり、それこそがjavascriptをそのような素晴らしい言語にしているのです。

私たちは図書館に依存しすぎて、著者が私たちの独創的で個人的な標準主導の方法を使用して解決するために私たちに任せている単純な問題を解決することができなくなっています。デザインだけでなく、構築することを奨励して、すべての人にハッピーコーディングを!

于 2013-02-04T23:34:20.420 に答える