Получение идентификатора текущей активной страницы

0

ЗАДНИЙ ПЛАН

Мое приложение состоит из 2 статических страниц и числа динамически генерируемых страниц. Количество динамически генерируемых страниц время от времени меняется. Моя первая статическая страница - это страница входа. После входа в систему вы попадаете на вторую статическую страницу, которая является приветственным экраном, а затем вы можете начать прокручивать влево, чтобы просмотреть динамически сгенерированные страницы.

Что я хочу достичь

Я в основном хочу получить идентификатор страницы текущей активной страницы. Как и я хочу получить идентификатор страницы, которую я просматриваю в настоящее время. я попробовал следующее

pageId = $('body').pagecontainer('getActivePage').prop("id"); 
console.log('==========================>THIS IS ID: '+pageId);

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

Вот код для всех соответствующих js

var widgetNames = new Array();
var widgetId = new Array();
//ActivePageId
var pageId = ''

$(document).on("pagecreate", function () {
    $("body > [data-role='panel']").panel().enhanceWithin();

});

$(document).on('pagecreate', '#page1', function () {

    $("#log").on('click', function () {

        $.ajax({
            url: "script.login",
            type: "GET",
            data: {
                'page': 'create_user',
                    'access': 'user',
                    'username': $("input[name='username']").val(),
                    'password': $("input[name='password']").val()
            },
            dataType: "text",
            success: function (html) {
                console.log(html);
                widgetNames = new Array();
                widgetId = new Array();
                var res = html.match(/insertNewChild(.*);/g);
                for (var i = 0; i < res.length; i++) {
                    var temp = res[i].split(',');
                    if (temp.length >= 3) {
                        widgetNames[i] = (temp[2].replace('");', '')).replace('"', '');
                        widgetId[i] = temp[1].replace("'", "").replace("'", "").replace(/ /g, '');
                    }
                }
                var AllWidgets = ''
                var testwidget = new Array();
                var tempWidgetContent = html.match(/w\d+\.isHidden(.*)\(\) == false\)[\s\S]*?catch\(err\)\{ \}/gm);

                for (var i = 0; i < tempWidgetContent.length; i++) {
                    var widgetContent = tempWidgetContent[i].substring(tempWidgetContent[i].indexOf('{') + 1);

                    testwidget[i] = widgetContent.replace("site +", "");
                }
                var widgetPart = new Array();
                for (var i = 0; i < widgetNames.length; i++) {
                    var pageHeaderPart = "<div data-role='page' id='" + widgetId[i] + "' data-pageindex='" + i + "' class='dynPageClass'><div data-role='header' data-position='fixed'><a data-iconpos='notext' href='#panel' data-role='button' data-icon='flat-menu'></a><h1>BASKETBALL FANATICO</h1><a data-iconpos='notext' href='#page2' data-role='button' data-icon='home' title='Home'>Home</a></div> <div data-role='content'>";
                    var pageFooterPart = "</div><div data-role='footer' data-position='fixed'><span class='ui-title'><div id='navigator'></div></span></div></div>";
                    var check = "<div data-role='content'><ul data-role='listview'data-insert='true'><li data-role='list-divider' data-theme='b'>" + widgetNames[i] + "</div>";
                    widgetPart[i] = '<DIV style=\" text-align: center; background-color:#989797; font-size: 75pt;\" id=widgetContainer_' + widgetId[i] + '></DIV><SCRIPT>' + 'function UpdateWidgetDiv' + widgetId[i] + '() {' + testwidget[i] + '$(\"#widgetContainer_' + widgetId[i] + '").html(counterValue);' + '}' + 'setInterval(function(){UpdateWidgetDiv' + widgetId[i] + '()},3000)' + '</SCRIPT>';
                    AllWidgets += '<a href="#' + widgetId[i] + '" class="widgetLink" data-theme="b" data-role="button" >' + widgetNames[i] + '</a>';
                    var makePage = $(pageHeaderPart + check + widgetPart[i] + pageFooterPart);

                    makePage.appendTo($.mobile.pageContainer);
                }
                $('#items').prepend(AllWidgets).trigger('create');

                //Get Active Page ID
     $( ":mobile-pagecontainer" ).on( "pagecontainershow", function( event, ui ) {
                          pageId = $('body').pagecontainer('getActivePage').prop("id"); 
                          alert( "The page id of this page is: " + pageId );
                          });

            }
        });
    });
});

Пожалуйста, посоветуйте и пожалеете, если это плохой вопрос, чтобы спросить, как я начинаю.

  • 2
    в вашем коде вы получаете активную страницу в вызове ajax, а не когда вы переходите на новую страницу. Поместите код обнаружения в событие pagecontainershow : api.jquerymobile.com/pagecontainer/#event-show
  • 0
    Перефект, я отредактировал код, и теперь я могу пролистывать страницы, на которых есть ссылки, и в сообщении отображается идентификатор этой страницы. Теперь мне просто интересно, как я могу взять эту переменную pageId, чтобы обновить только страницу, которую я просматриваю?
Показать ещё 3 комментария
Теги:
jquery-mobile

1 ответ

2
Лучший ответ

Вы получали активную страницу из вызова ajax, а не при переходе на новую страницу.

Код обнаружения должен срабатывать, когда вы находитесь на одной из динамических страниц, показывая, что вы можете использовать pagecontainershow для обнаружения идентификатора страницы сразу после отображения страницы (http://api.jquerymobile.com/pagecontainer/#event-show).

$( ":mobile-pagecontainer" ).on( "pagecontainershow", function( event, ui ) {
    pageId = $(":mobile-pagecontainer" ).pagecontainer('getActivePage').prop("id"); 
});

UPDATE: использование pageid при обновлении страниц:

Похоже, что вы хотите обновлять каждые 3 секунды на активной странице. поэтому создайте функцию для всей страницы:

function UpdateActivePage(){
    //get active page
    pageId = $(":mobile-pagecontainer" ).pagecontainer('getActivePage').prop("id");
    //figure out index
    var idx;
    for (var i=0; i<widgetId.length; i++){
       if (widgetId[i] == pageid){
          idx = i;
          break;
       }
    }

    //run your update
    eval(testwidget[idx]);
    $("#widgetContainer_" + pageid).html(updated stuff);

}

setInterval(UpdateActivePage, 3000);
  • 0
    Благодарю. также, если вы можете включить шаги для использования переменной pageId для обновления текущей страницы.
  • 1
    Смотрите обновленный ответ
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню