JQuery нагрузка на тело с Синатра / Хамл - PullRequest
0 голосов
/ 23 ноября 2011

Следующий вывод генерируется с помощью файла макета Haml и index.haml из Sinatra

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Meeting</title>
    <meta content='width=device-width, initial-scale=1' name='viewport' />
    <script src='http://code.jquery.com/jquery-1.6.4.min.js'></script>
    <script src='http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js'></script>
    <link href='http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css' rel='stylesheet' type='text/css' />
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'></script>
    <script type='text/javascript'>
      //<![CDATA[
        $(document).ready(function() {
          setTimeout(getUpdate,10000);
          function getUpdate(){
            $("body").load("/");
          }
        })
      //]]>
    </script>
  </head>
  <body>Some text</body>
</html>

Я пытаюсь заменить body вызовом root /' but if it is an AJAX call, my code at / checks for it and theoretically should only replace what's in body`, но вместо этого он заменяет весь документ.

Вот мой Sinatra & Haml код Ruby

get '/' do
  ... set some instance vars to be displayed in index.haml ...
  haml :index, :layout => (request.xhr? ? false : :layout)
end

1 Ответ

0 голосов
/ 23 ноября 2011

Я не уверен, что «заменяет весь документ». Я заметил, что вы используете библиотеку jQuery Mobile. Если признак в том, что стиль или макет исчезают, я думаю, что проблема в jQuery Mobile.

jQuery Mobile автоматически изменит вашу структуру DOM. Если вы попытаетесь проверить элемент DOM в своем браузере, вы увидите что-то вроде:

<div data-role="page" data-url="/test.html" tabindex="0" 
  class="ui-page ui-body-c ui-page-active" style="min-height: 737px; ">
  Some text
</div>

Если вы замените весь элемент body, это определенно приведет к поломке jQuery Mobile.

С другой стороны, вам не нужно использовать функцию jQuery load для запроса XHR. Пожалуйста, взгляните на это: http://jquerymobile.com/demos/1.0/docs/pages/page-links.html:

Чтобы включить анимированные переходы страниц, все ссылки, которые указывают на внешнюю страницу (например, products.html), будут загружаться через Ajax. Чтобы сделать это ненавязчиво, платформа анализирует href ссылки, чтобы сформулировать запрос Ajax (Hijax), и отображает счетчик загрузки. Все это происходит автоматически с помощью jQuery Mobile.

Если вы используете jQuery Mobile, вы должны следовать пути jQuery Mobile. В противном случае вы можете удалить jQuery Mobile и использовать свой собственный механизм XHR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...