JQM - 仅在加载时注入动态内容

时间:2012-09-10 18:08:31

标签: jquery-mobile

我正在尝试使用自定义模板填充功能在加载时动态填充选择标记(最新的jQM版本)。

如果在“pagebeforechange”事件中调用fn,则正确初始化select标记。由于在每次页面转换时调用此事件,我想到将fn移动到'pageinit'事件。这不起作用,大概是因为DOM还没有完全可用。如何强制jQM只在页面中注入一次内容?目前,我正在使用kludge。肯定必须有一个更聪明的方法。感谢您的任何建议。

  $(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"); 
});

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你的问题,但我会抛出一些东西,如果我可以进一步扩展,你就告诉我。

要在页面加载时只触发一次触发器,您可以尝试实现常规JQuery $(document).ready(function(){})又名$(function(){}),这是因为JQuery Mobile用户被告知不要使用它的确切原因。它只在DOM加载时触发一次。其他页面不会触发它,因为它们是通过Ajax进行切换的。

除此之外,在常规动态内容加载上,您可以看一下我之前为其他人准备的以下示例:

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