2010-06-01 3 views
0

У меня есть веб-приложение iphone, построенное в jqtouch, когда содержимое загружается ссылками («тегами»), тогда любой контент на следующей странице анализируется jqtouch, и любые ссылки инициализируются. Однако, когда я загружаю контент через вызов AJAX и append() его элементу, то никакие ссылки в этом содержимом НЕ инициализируются jqtouch. Таким образом, любые клики по этим ссылкам являются полномасштабными кликами на новый ресурс и не обрабатываются jqtouch, поэтому в этот момент вы эффективно вышли из jqtouch.Инициализация ссылок в jqtouch в загруженном содержимом AJAX

Мой AJAX код:

#data 
<script type="text/javascript"> 
     $.ajax({ 
     url: '/mobile/nearby-accounts', 
     type: 'GET', 
     dataType: 'html', 
     data: {lat: lat, lng: lng}, 
     success: function(html) { 
      $('#data').empty().append(html); 
      // Is there some method I call on jqtouch to have any links in $('#data') be hooked up to the jqtouch lifecycle? 
     } 
</script> 

Спасибо заранее.

ответ

0

я смог добиться этого, делая две вещи:

1) Экспорт ранее частный метод «liveTap» как общественности путем изменения jqtouch.js и добавления liveTap в список методов, возвращаемые (в конце jqtouch.js):

publicObj {getOrientation:getOrientation,goBack:goBack,goTo:goTo, 
addAnimation:addAnimation,submitForm:submitForm, liveTap:liveTap}; 
return publicObj; 

2) Вызов обработчика liveTap на моем завернутые контейнер, который имеет ссылки, я хотел бы "подключить" к jqTouch:

 $('#data a').click(function(e) { 
     e.preventDefault(); 
     jqTouch.liveTap(e);    
     }); 
0

Doing ВОЛП мычание работал лучше для меня, и это не требует изменения источника:

jQT.goTo('#slide', 'slide'); 

где #slide это идентификатор панели с возможностью скольжения.

0

Хотя решение @ Cody будет работать, вам лучше добавить контейнер div на исходную страницу, которую вы могли бы затем заполнить асинхронно и оживить. Например: в main.html добавить:

... <div id="future"></div> ...

Затем в сценарии добавляющим, добавьте:

 

$('selector').append('<a href='#future"&gtlink</a>').find('a').click(function(e) { 
    e.preventDefault(); 
    loadDataAndShow($(this).<read some context here>); 
}); 

function loadDataAndShow() { 
    // Use ajax like $.getJSON or whatever to load data here 

    // populate $('#future') with data then 

    jQT.goTo('#future', 'slide'); 
} 

Тогда проблема с добавлением ссылки из сценария, который затем загружает jQTouch контейнеры, что вам то нужно разоблачить скрытые методы, и даже тогда это не 100%. Кроме того, если вы делаете предложения, вы можете разбить метод append, чтобы сначала добавлять в цикл без «.click», затем одну команду jQuery, чтобы добавить прослушиватель кликов. Вы можете/должны добавлять атрибуты для загрузки контекста, указанного выше.

@emtrane: вопросы касаются загрузки ajax блока jQuery, который сам загружает дополнительный контент в ссылку.

+0

отказ от ответственности: я работаю со старой версией jQTouch ... так что, возможно, новый API, чтобы сделать это уже. Просто заметил, что это старый вопрос. – Ephraim