2012-09-10 22 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