2012-09-10 23 views
2

我试图在加载时使用自定义模板填充函数动态填充选择标记(最新的jQM版本)。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"); 
}); 
+0

也许不是你想找的,但你可以只设置一个标志。 – Jack

回答

0

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

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

除此之外,定期动态内容加载你看看下面的例子我拼凑别人更早:

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

+0

谢谢。我尝试了这种方法:将动态内容添加到DOM,但即使使用触发器(“create”)或page()方法,它仍保持隐藏状态。不确定,但似乎“pagebeforecreate”事件可能会在这里解救(请参阅我的原始文章中的编辑)。 – user1660874

+0

试试吧。如果有效 - 将其作为下面的答案发布。 – Shenaniganz

+0

如上所述,$(document).ready()插入动态内容,但html标签保持隐藏状态。试图通过触发器(“刷新/创建”),显示()等渲染它们(使可见)无济于事。在我的情况下,“pagebeforecreate”似乎是解决方案。 – user1660874