hQml-код для мобильных приложений jQuery - PullRequest
1 голос
/ 11 августа 2011

Я хотел бы добавить некоторый код на страницу с помощью jQuery / jQuery mobile, я хотел бы добавлять только один раз, а не при каждом посещении страницы.

** окончательное редактирование **

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Page Title</title>   
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js"></script>

    <script>
    //$(document).ready(function()                  // get error when I use this
    $('#page1').live('pageshow', function ()                
        {  
            //  alert("!");
                var section1 = "<p>some code for page 1...</p>";                
                myClone1 = $(section1);                                 
                myClone1.appendTo("#placeholder1").trigger('create');
        });             

    $('#page2').live('pageshow', function ()                
        {  
            //  alert("!");
                var section2 = "<p>some code for page 2...</p>";
                myClone2 = $(section2);                 
                myClone2.appendTo("#placeholder2").trigger('create');

        });         
        </script>

</head> 
<body> 
    <div data-role="page" id="page1">       
            <div data-role="content">
                    <div data-role="navbar">
                    <ul><li><a data-icon="home" data-transition="none" id="page1" href="#page1">page1</a></li>
                        <li><a data-icon="grid" data-transition="none"  id="page2" href="#page2">page2</a></li>             
                    </ul>
                    </div>
                <div id="placeholder1">Page 1</div>
            </div>      
    </div>

    <div data-role="page" id="page2">       
            <div data-role="content">
                    <div data-role="navbar">
                    <ul><li><a data-icon="home" data-transition="none" id="page1" href="#page1">page1</a></li>
                    <li><a data-icon="grid" data-transition="none"  id="page2" href="#page2">page2</a></li>                                 
                    </ul>
                    </div>
                <div id="placeholder2">Page 2</div>
            </div>
        </div>      
    </div>


</body>
</html>

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Вы можете проверить наличие кода, который вы добавляете, прежде чем добавлять его.Таким образом, при последующих посещениях страницы данные не будут добавляться:

$('#page1').live('pageshow', function ()                
{  
    //  alert("!");
    if ($(this).find('p.appended_code').length === 0) {
        var section1 = "<p class='appended_code'>some code for page 1...</p>";                
        myClone1 = $(section1);                                 
        myClone1.appendTo("#placeholder1").trigger('create');
    }
});

Обратите внимание, что я добавил класс 'appended_code' к тегу абзаца, который вы добавляете, и это селектор, который я использовал для проверкина наличие добавленного кода.

- Обновление -

Вы также можете немного очистить код, если используете соглашения об именах на основе чисел:

var pageData = new Array();
pageData[1] = "<p class='appended_class'>some code for page 1...</p>";
pageData[2] = "<p class='appended_class'>some code for page 2...</p>";
$('div[id^="page"]').live('pagebeforeshow', function () {
    if ($(this).find('p.appended_class').length === 0) {
        var page_num = $(this).attr('id').replace('page', '');
        $("#placeholder" + page_num).append(pageData[page_num]).trigger('create');
    }
}); 

Обратите внимание, что селектор div[id^="page"] ищет div с идентификатором, который начинается с "page"

Вот jsfiddle для ya: http://jsfiddle.net/S3wE6/1/

Если вы хотите, чтобы данныеПри добавлении при начальной загрузке я бы порекомендовал создать строку кода, в которой данные добавляются в функцию, и вызвать ее $(document).ready();

1 голос
/ 12 августа 2011

Это похоже на работу ... с минимальными изменениями. Добавлять только на событие создания страницы.

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Page Title</title>   
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js"></script>

    <script>
    $('#page1').live('pagecreate', function ()              
        {  
                var section1 = "<p>some code for page 1...</p>";                
                myClone1 = $(section1);                                 
                myClone1.appendTo("#placeholder1").trigger('create');
        });             

    $('#page2').live('pagecreate', function ()              
        {  
                var section2 = "<p>some code for page 2...</p>";
                myClone2 = $(section2);                 
                myClone2.appendTo("#placeholder2").trigger('create');

        });         
        </script>

</head> 
<body> 
    <div data-role="page" id="page1">       
            <div data-role="content">
                    <div data-role="navbar">
                    <ul><li><a data-icon="home" data-transition="none" id="page1" href="#page1">page1</a></li>
                        <li><a data-icon="grid" data-transition="none"  id="page2" href="#page2">page2</a></li>             
                    </ul>
                    </div>
                <div id="placeholder1">Page 1</div>
            </div>      
    </div>

    <div data-role="page" id="page2">       
            <div data-role="content">
                    <div data-role="navbar">
                    <ul><li><a data-icon="home" data-transition="none" id="page1" href="#page1">page1</a></li>
                    <li><a data-icon="grid" data-transition="none"  id="page2" href="#page2">page2</a></li>                                 
                    </ul>
                    </div>
                <div id="placeholder2">Page 2</div>
            </div>
        </div>      
    </div>


</body>
</html>
1 голос
/ 11 августа 2011

хорошо, это было немного сложно, но вот живая версия:

JS:

var elem_id;
var appendToStatus = {};
appendToStatus['page1'] = true;
appendToStatus['page2'] = true;

$('div').live('pageshow', function() {  
    elem_id = $(this).attr('id');
    appendToStatus[elem_id] = fnCreateGroups(elem_id, appendToStatus[elem_id]);
}); 

function fnCreateGroups(elem_id, appendToStatus) {
    if(appendToStatus == true) {
        var section = "<p>some code for " + elem_id + "...</p>";
        myClone = $(section);               
        myClone.appendTo("#" + elem_id + "_placeholder").trigger('create');
        return false;
    }               
} 

HTML:

<div data-role="page" id="page1">       
        <div data-role="content">
                <div data-role="navbar">
                <ul><li><a data-icon="home" data-transition="none" href="#page1">page1</a></li>
                    <li><a data-icon="grid" data-transition="none" href="#page2">page2</a></li>             
                </ul>
                </div>
            <div id="page1_placeholder">Page 1</div>
        </div>      
</div>

<div data-role="page" id="page2">       
    <div data-role="content">
            <div data-role="navbar">
                <ul><li><a data-icon="home" data-transition="none" href="#page1">page1</a></li>
                    <li><a data-icon="grid" data-transition="none" href="#page2">page2</a></li>             
                </ul>
            </div>
        <div id="page2_placeholder">Page 2</div>
    </div>
</div>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...