Есть ли способ получить Javascript на JQuery Mobile AJAX загрузки - PullRequest
1 голос
/ 21 января 2012

Я знаю, что когда вы переключаете страницы с помощью jquery mobile, используя ajax, он удерживает DOM в теле только с data-role="page". Проблема в том, что это приложение с телефонной пробкой, работающее на мобильном устройстве, поэтому полная загрузка страниц без ajax происходит довольно медленно, получая все сценарии JS, CSS.

Я искал, пробуя разные вещи. В документах говорится, что вы можете добавить javascript к dom и поместить его под элемент data-role="page", но я до сих пор не могу заставить его срабатывать таким образом.

В настоящее время я пытаюсь использовать скрипт начальной загрузки, который включен в начало первой страницы, и при смене страницы он пытается вставить js, специфичные для этой страницы, в dom

function insertScript(script, container) {
var elem = document.createElement('script');
elem.type = 'text/javascript';
elem.src = 'Assets/Scripts/' + script + '.js';
container.appendChild(elem);
}
$(document).bind('pagechange', function(event){

//get the path to the html asset
var path = document.location.pathname;

//split up
var arr = path.split('/');

//get the relevant part of the path ie index.html
var page = arr[arr.length-1];

// grab a list of all the divs's found in the page that have the attribute "role" with a value of "page"
var pages = $('div[data-role="page"]'),
// the current page is always the last div in the Array, so we store it in a variable
currentPage = pages[pages.length-1];

//if the page is index add index.js to the last dom node
if (page == 'index.html') {
    insertScript('index', currentPage);
}

});

Тогда, например, index.js имеет следующий

$("#start_page").live('pageinit', function() {
    alert('on start page');       
});

но функция Pageinit никогда не срабатывает. Любые идеи

** редактировать:

У меня есть несколько html-страниц, например, index.html и home.html

* index.html

<html>
<head>
<script type="text/javascript" src="js/phonegap-1.3.0.js"></script>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.0.min.js"></script>
<script type="text/javascript">
$("#index_page").live('pageinit', function() {

//do some page specific js functions for index.html
});

</head>
<body>
<div data-role="page" id="index_page">
<a href='home.html'>go to home page</a>
</div>
</body>
</html>

** home.html

<html>
<head>
<script type="text/javascript">
$("#home_page").live('pageinit', function() {

   //this is the JS I want to pull
});

</head>
<body>
<div data-role="page" id="home_page">
<h1>this is the home page</h1>
</div>
</body>
</html>

Итак, что произойдет, когда я нажму на ссылку из индекса в дом, обновится dom, но любой JS на странице home.html НЕ будет вставлен на страницу через AJAX, поэтому я пытаюсь найти способ сделай это.

Я знаю, что могу включить ВСЕ мои js на одной странице, но я действительно пытаюсь избежать этого, потому что у меня много страниц, и это быстро станет грязным.

Ответы [ 3 ]

1 голос
/ 21 января 2012

Имейте в виду, что когда jQuery Mobile загружает другую страницу через AJAX, все, что он делает, это вставляет <div data-role="page"> с новой страницы в <body> существующей страницы.Что-либо за пределами этого div может также не существовать.Поэтому, когда вы открываете вторую страницу, скрипт, который вы хотите вставить, на самом деле не существует.

Способы, которыми вы можете сделать это, - включить скрипт в div вашей страницы или загрузить весь свой javascriptв голове.Вам также следует обратить внимание на эту небольшую мудрость в

http://code.jquery.com/mobile/latest/demos/docs/api/events.html

", чтобы эти обработчики вызывались во время начальной загрузки страницы, вы должны связать их перед выполнением jQuery Mobile.может быть сделано в обработчике mobileinit, как описано на странице глобальной конфигурации. "

О, и еще одна вещь, которую нужно помнить ... копирование javascript на страницу, которая уже загружена, фактически не выполнит его;)

0 голосов
/ 10 июня 2013

Я встретил проблему еще. наконец, я использовал тег iframe и добавил на страницу data-role="page" div.

Так же, как это:

<iframe style="display:none" onload="javascript:js_fun()"></iframe>

тогда js_fun() запускается. Таким образом можно загрузить JS-код или файл с помощью AJAX.

0 голосов
/ 21 января 2012

Не совсем точно, что вы пытаетесь достичь, но вы можете перебрать каждую ссылку на странице с помощью javascript и настроить onclick для возврата false, но перенаправить href к вызову ajax. Страница php получит URL запрашиваемой страницы, проанализирует xml и вернет содержимое тела. Это может заменить тело первой страницы.

...