【问题标题】:JQM - Inject dynamic content at load time onlyJQM - 仅在加载时注入动态内容
【发布时间】:2012-09-10 18:08:31
【问题描述】:

我正在尝试使用自定义模板填充功能在加载时(最新 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"); 
});

【问题讨论】:

  • 可能不是您想要的,但您可以设置一个标志。

标签: jquery-mobile


【解决方案1】:

我不确定我是否完全理解你的问题,但我会在那里抛出一些东西,如果我可以进一步扩展,你让我知道。

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

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

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

【讨论】:

  • 谢谢。我尝试了这种方法:动态内容被添加到 DOM 中,但即使使用了 trigger("create") 或 page() 方法,它仍然是隐藏的。不确定,但似乎“pagebeforecreate”事件可能会在这里救援(请参阅我的原始帖子中的编辑)。
  • 如上所述,$(document).ready() 插入动态内容,但 html 标签保持隐藏。尝试通过 trigger("refresh/create")、show() 等渲染它们(使其可见)无济于事。就我而言,“pagebeforecreate”似乎是解决方案。
  • 这就是我所指的,你的解决方案。如果可行,请继续并将其作为解决方案发布在下面。
  • 我发了一篇关于如何注入动态内容here的大纲,供有兴趣的朋友参考。
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2011-06-14
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多