Ответ 1
Теперь, когда JQuery Mobile созрел совсем немного и приближается к версии 1.0, я решил сделать еще один удар, чтобы заставить его работать правильно. У меня был хороший успех, поэтому я хотел бы поделиться этим решением.
Вот версии, с которыми я сейчас работаю (начиная с 01 февраля 2012 года):
jQuery Mobile 1.0.1
jQuery 1.6.4
jQuery UI 1.8.12
Порядок, на который ссылки ссылаются, имеет решающее значение. Это должен быть jQuery, jQuery UI, jQuery Mobile, а затем ваш пользовательский script файл последний. Мой заголовок страницы выглядит следующим образом:
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1" />
<title>My jQM App</title>
<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.js" type="text/javascript"></script>
<script src="/Scripts/script.js" type="text/javascript"></script>
<link rel="stylesheet" href="/Content/style.css" />
</head>
Весь код автозаполнения должен находиться в отдельном файле .js и должен быть последним связанным с ним файлом. В этом примере моя - script.js.
Затем убедитесь, что у всех ваших страниц div (data-role = 'page') также установлен идентификатор. Например, на моей странице поиска у меня есть
<div data-role="page" id="searchPage">
Теперь, когда вся страница div имеет идентификатор, вы можете связать событие jQuery Mobile pagecreate для этого div. На стандартной странице jQuery у вас есть что-то вроде этого для автозаполнения:
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
Чтобы сделать эквивалент, но подключить его к определенной странице div, выглядит следующим образом:
$('#searchPage').live('pageinit', function (event) {
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
});
Это хорошо работает для меня до сих пор. Я смог вырезать большинство атрибутов data-ajax = "false", которые у меня были в качестве обходного пути. Это, в свою очередь, привело к повышению производительности приложений. Я никоим образом не выполнил исчерпывающий тест совместимости между jQuery UI и jQuery Mobile, поэтому ваш пробег может отличаться. Оставьте комментарий здесь, если у вас возникнут проблемы с этим методом. Удачи.