2

カスタム テンプレートの入力機能を使用して、ロード時 (最新の jQM バージョン) に選択タグを動的に設定しようとしています。

「pagebeforechange」イベントで fn が呼び出された場合、select タグは適切に初期化されます。このイベントはページ遷移ごとに呼び出されるため、fn を「pageinit」イベントに移動することを考えました。おそらくDOMがまだ完全に利用可能ではないため、これは機能しません。ページにコンテンツを一度だけ挿入するようにjQMを強制するにはどうすればよいですか? 現在、私はクラッジを使用しています。きっともっとスマートな方法があるはずです。提案をありがとう。

  $(document).bind('pageinit', function () {
     InitSelTagTest("#selActTag", "tplTag"); // Does not work.
  });

  $(document).bind("pagebeforechange", function (e, data) {        
     if ($("#selActTag").children().size() === 0) {
        InitSelTagTest("#selActTag", "tplTag"); // Kludge, but it works
     }
  });

  function InitSelTagTest(el,tpl) { // Append all tags to element el      
     var lstAllTags = JSON.parse($("#hidTag").val()); // Create tag array

     // Retrieve html content from template.
     var cbeg = "//<![" + "CDATA[", cend = "//]" + "]>";
     var rslt = tmpl(tpl, { ddd: lstAllTags }).replace(cbeg, ").replace(cend,");            

     $(el).html(rslt).trigger("create"); // Add to DOM.
  }

編集 Shenaniganz のコメントに応えて、「pagebeforecreate」イベントがそのトリックを実行できるようです。

$("#pgAct").live("pagebeforecreate", function () {
    // Populate tag select. Works. Traversed only once.      
    InitSelTag("#selActTag", "tplTag"); 
});
4

1 に答える 1

0

あなたの質問を完全に理解しているかどうかはわかりませんが、いくつかのことを投げかけます.さらに拡張できるかどうかを教えてください.

ページの読み込み時に何かを 1 回だけトリガーするようにするには、JQuery Mobile ユーザーが使用しないように指示されている正確な理由から、通常の JQuery$(document).ready(function(){})別名を実装してみてください。$(function(){})DOM ロード時に 1 回だけトリガーされます。それ以降のページは、Ajax を介して切り替えられているため、トリガーされません。

それ以外に、通常の動的コンテンツの読み込みでは、以前誰かのためにまとめた次の例を見てください。

http://jsbin.com/ozejif/1/edit

于 2012-09-10T23:16:59.290 に答える