javascript
  • jquery
  • asp.net
  • jquery-mobile
  • 2012-09-08 24 views 5 likes 
    5

    我動態添加標記,以我的應用程序下面的示例代碼..應用程序顯示無樣式的HTML它呈現jQuery Mobile的前

    $(document).bind("pagechange", function (event, ui) { 
        var header = '<h3>' + appNames[i] + '</h3>'; 
    
         var ulHeader = '<ul data-role="listview" id="myAppsGridTable" data-inset="true">'; 
    
    .. 
        $('.myBodyContent', ui.toPage).append(collapse + header + ulHeader + entire_list + '</ul>' + '</div>'); 
        $('#NicksPage').trigger('create'); 
    
    }); 
    

    我有我的Default.aspx頁面此頁面的引用和參考jquery手機在主頁面。當你導航到默認時,用戶看到原始未加綁定的HTML添加到頁面,然後閃爍和jquery移動樣式進來。是否有任何我可以擺脫顯示未加綁定的HTML到用戶看到jQuery的移動樣式添加之前看到?

    這裏是我的母版頁的副本:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="UserMobile.master.cs" Inherits="User.Mobile.UserMobile" %> 
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head id="Head1" runat="server"> 
        <meta name="viewport" content="width=device-width, initial-scale=1"> 
        <link href="Css/jquery.mobile.custom.structure.min.css" rel="stylesheet" type="text/css" /> 
        <link href="Css/jquery.mobile.custom.theme.min.css" rel="stylesheet" type="text/css" /> 
    
        <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
        </asp:ContentPlaceHolder> 
    </head> 
    
    <body> 
    
    <div data-role="page" data-theme="b" id="NicksPage"> 
    
        <div data-role="header" data-position="fixed" data-theme="b"> 
    
         <asp:ContentPlaceHolder ID="TopHeaderContent" runat="server"></asp:ContentPlaceHolder> 
    
    
        </div><!-- /header --> 
    
        <div data-role="content" class="myBodyContent"> 
    
    <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder> 
    
        </div><!-- /content --> 
    
        <div data-role="footer" data-position="fixed" data-theme="b"> 
        <asp:ContentPlaceHolder ID="FooterContent" runat="server"></asp:ContentPlaceHolder> 
    
    
        <input type="hidden" id="collapse_value" value="false" /> 
        </div><!-- /footer --> 
    
    </div><!-- /page --> 
    
        //Combined jquery 1.8 and jquery mobile files in one 
        <script src="Js/JQ_JQM_combined.js" type="text/javascript"></script> 
    
        //Makes ajax calls to get data 
        <script src="Js/UserMobile.js" type="text/javascript"></script> 
    
        <script type="text/javascript"> 
         $(document).ready(function() { 
    
          // disable page transitions 
          $.mobile.ajaxEnabled = false; 
          $.mobile.defaultPageTransition = 'none'; 
         }); 
    
        </script> 
        <asp:ContentPlaceHolder ID="ScriptContent" runat="server"></asp:ContentPlaceHolder> 
    
    </body> 
    
    </html> 
    

    即使在首頁有閃爍的問題,它使無樣式,然後在一段時間內妥善風格到jQuery Mobile的後..

    <%@ Page Title="" Language="C#" MasterPageFile="~/Mobile/UserMobile.Master" AutoEventWireup="true" CodeBehind="Home.aspx.cs" Inherits="User.Mobile.Home" %> 
    <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    </asp:Content> 
    <asp:Content ID="Content2" ContentPlaceHolderID="TopHeaderContent" runat="server"> 
        <h1> 
         Applications</h1> 
    </asp:Content> 
    <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server"> 
    <div data-role="controlgroup"> 
    <a href="MyStuff.aspx?name=nick&id=1234" data-role="button">My Stuff</a> 
    <a href="Employees.aspx?name=nick&id=1234" data-role="button">Employees</a> 
    <a href="list.aspx?name=nick&id=1234" data-role="button">List</a> 
    
    </div> 
    
    
    </asp:Content> 
    <asp:Content ID="Content4" ContentPlaceHolderID="FooterContent" runat="server"> 
        <div class="lines"> 
         <div class="footerCopyrightContainer"> 
          <div class="footerCopyright"> 
           &copy;2012 NICK ALL RIGHTS RESERVED.</div> 
         </div> 
        </div> 
    </asp:Content> 
    

    我改變了我的代碼以反映你的小提琴示例,但我仍然在閃爍。但「的時間,其中閃爍無樣式,以風格是週期短,用戶仍然可以看到無樣式頁面在手機瀏覽器,你可以去看看FO我如何得到它設置我這麼想嗎?

    $(document).bind("pagecreate", function (event, ui) { 
    
        //gets params needed from querystring 
        arrQrStr = getQueryStringParams(); 
        name = arrQrStr["name"]; 
        id = arrQrStr["id"]; 
    
    }); 
    
    
    $(document).delegate('div[data-role=page]', 'pagebeforeshow', function (e, data) { 
    
        var employees = null; 
    
        //returns string of html needed 
        employees = getData(name, id); 
    
        $('.myBodyContent', this).html(employees); 
    
        $(this).trigger('create'); 
    
    }); 
    

    的getData Ajax調用..

    $.ajax({ 
         type: "POST", 
         url: "MobileService.svc/REST/GetData", 
         contentType: "application/json; charset=utf-8", 
         data: JSON.stringify({ id: id}), 
         dataType: "json", 
         async: false, 
         success: function (msg) { 
    

    這個問題有來源於此:

    <script type="text/javascript"> 
         $(document).ready(function() { 
    
    
          // disable page transitions 
          $.mobile.ajaxEnabled = false; 
          $.mobile.defaultPageTransition = 'none'; 
    
    
    
         }); 
    
    
        </script> 
    

    如果我參加了這一點,母版頁閃爍消失的,它導航頁面罰款,但該數據將不顯示。以這個劇本出來休息的Ajax調用和jQuery Mobile的事件不要搞(我不知道爲什麼)

    +0

    getData函數是否使用AJAX等異步過程? – Jasper

    +0

    它使用ajax,但異步設置爲false –

    +0

    有可能使用同步請求創建閃爍。爲什麼不鏈接到使用服務器端語言獲取數據並創建必要頁面的外部文檔,而不是使用AJAX請求獲取數據?感覺就像你在複雜的問題... – Jasper

    回答

    1

    這聽起來像你誤解了ajax enabled設置的工作原理。

    默認情況下此設置鏈接的網頁上啓用,當你鏈接到另一個頁面JQM拉在第一JQM頁面發現(data-role="page")(所以你不能鏈接到一個multipage文件)和增強(初始化所有JQM小部件),然後將其附加到當前頁面的DOM。當JQM這樣做時,只有拉到JQM頁面上,沒有其他的在那個頁面上(所以第二頁won't上的任何腳本和樣式都有影響)。處理這個問題的方法是在當前的主頁頁面中擁有所有腳本。如果你這樣做的話,你需要注意的一點是你可能會得到多個頁面,並且具有相同的id(實際上使用當前的設置,你肯定會有重複的ids),所以你可能想用class來選擇它們。

    隨着ajax enabled設置爲false它的行爲就像在這種情況下,整個頁面加載,如果你的JQM腳本是在底部,那麼此後一直到它的加載也不會是能夠提高常規鏈接另一方面DOM,這就是爲什麼你看到閃爍。

    作爲一個支點page transistions are only available if ajax啓用is set to true`。

    綜上所述,除非你有一個理由不對你應該去ajax enabled設置爲true,並在你的主頁上包含相關的腳本。如果您需要使用ajax enabled設置爲false,則嘗試將您的jQuery腳本放在標題中,以便在DOM的其餘部分之前加載它們。

    Alternaticely你可以做的是隱藏在那裏你會被追加你的HTML,然後一旦您完成顯示它的容器元素,例如

    CSS

    .displayNone { display: none; } 
    

    HTML

    <div data-role="content" class="myBodyContent displayNone"> 
         <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder> 
        </div> 
    

    JS

    $('.myBodyContent', this).html(employees); 
        $(this).trigger('create'); 
        $('.myBodyContent', this).reomveClass('displayNone'); 
    
    0

    嘗試使用的pagebeforeshow代替pagechange。像這樣:

    $(document).delegate('div[data-role=page]', 'pagebeforeshow', function(e, data){ 
        var toPage = this; // this references the page that is about to be shown 
        // Add items to the page 
    }); 
    

    pagebeforeshow事件被觸發的「toPage」被transisioned到,實際過渡動畫開始前。這使您可以在顯示給用戶之前添加元素和樣式。

    我希望這有助於!

    編輯

    這裏是一個JSFiddle與實施建議的修復。

    +0

    因此,在我的代碼中,我將ui.toPage更改爲toPage這裏$('。myBodyContent',ui.toPage)並訂閱您的活動,如圖所示? –

    +0

    似乎沒有爲我工作仍然得到相同的結果 –

    +0

    @NickLaMarca你可以看看這個JSFiddle與執行修復如上:http://jsfiddle.net/Rthpv/5/。你可以看看這是否有效,如果不修改小提琴重現你的錯誤,以便我可以提供答案。謝謝。 – dSquared

    1

    嘗試把你的jquery移動源腳本放在頭部,而不是放在主體的尾部。

    這是我可以保證用戶永遠不會看到無格式html的唯一方法。

    +0

    我試過閃爍仍然存在它必須連接到打開和關閉文檔就緒腳本,從而打破了jQuery移動事件 –

    相關問題