Jquery mobile — проблема с onhashchange

Я использую $.mobile в своем приложении. Я должен создать свою собственную систему маршрутизации. Привязываю наблюдателя к hashchange и вытаскиваю интересные данные из location.hash. У меня проблема - jQuery.mobile удаляет знак решетки из location.hash, если он имеет косую черту (например, от 'lalal/#controller/action/param' до 'lalal/controller/action/param' и $.mobile говорит в желтом поле Error Loading Page.

Сначала я попытался отвязать существующий «хэш-обмен», но затем страницы не загружались автоматически (что мне и нужно).

Как предотвратить изменения хэша, но jQuery все равно должен автоматически загружать страницу (например, по ее идентификатору, объявленному в элементе, имеющем data-role='page')? . Ниже приведен фрагмент моего класса маршрутизатора: ( Router.load не меняется location.hash )

__construct: function() {   

        var that = this; 
        $( window ).bind( "hashchange" , function( e ) {
            //e.stopImmediatePropagation()
            that.load( this.location.hash  ); 

        });  
    }

person abuduba    schedule 16.11.2011    source источник
comment
Какую версию jQM и jQuery вы используете? как и в RC1 и RC2, там исправлены некоторые ошибки в hashchange   -  person Phill Pafford    schedule 17.11.2011
comment
Вы имеете в виду последнюю версию jQuery 1.7 и jQueryMobile RC3? Просто отметим, что jQuery 1.7 еще не поддерживается jQM, поэтому вам следует использовать версию 1.6.4.   -  person Phill Pafford    schedule 17.11.2011


Ответы (2)


Я полагаю, что вы боретесь с плагином pushState в jQuery Mobile, добавленным в бета-версии 3 (я полагаю). Вы можете отключить этот подключаемый модуль с помощью следующего кода (используется перед включением файла jQuery Mobile JavaScript):

$(document).on('mobileinit', function () {
    $.mobile.pushStateEnabled = false;
});

Ознакомьтесь с документацией здесь (обратите внимание на раздел «Плагин pushState»): http://jquerymobile.com/demos/1.0rc3/docs/pages/page-navmodel.html

person Jasper    schedule 16.11.2011
comment
Отключение pushStateEnabled приводит к тому, что знак хэша больше не исчезает из адресной строки - хорошо, но $.mobile все еще пытается загружать страницы с помощью ajax (только когда хэш содержит косые черты) - даже когда $.mobile.ajaxEnabled = false; конечно, со статусом 404 и jqm выдает ошибку загрузки страницы - person abuduba; 17.11.2011

в вашем html после включения jquery и до включения jquery.mobile-1.x.y.js добавьте:

<script>
$(document).bind("mobileinit", function(){
        $.mobile.pushStateEnabled = false;
        $.mobile.ajaxEnabled = false;
        $.mobile.hashListeningEnabled = false;
});
</script>
person pQd    schedule 06.10.2012