Добавление div в тело HTML с помощью Lift - PullRequest
4 голосов
/ 06 августа 2010

Я недавно играл с Scala / Lift / Comet / Ajax и т. Д.Я столкнулся с проблемой, которая сводится к следующему:

Сводка

Я хочу обновить определенный div (по идентификатору), когда происходит определенное событие.Если div еще не существует, его необходимо создать и добавить в тело HTML.

В настоящее время я не могу заставить это работать при использовании платформы Lift.

Исходный файл

LIFT_PROJECT / src / main / webapp / static / mouseViewTest.html:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        // <![CDATA[
        $(document).ready(function() {
            updateOrCreateMouseDiv('123', 'coords')
        });

        function updateOrCreateMouseDiv(uniqueId, coords) {
            if ($('#mouse_'+uniqueId).length == 0) {
                $('body').append('<div id=' + uniqueId + '>' + coords + '</div>');
            }

            $('#mouse_'+uniqueId).html(coords)
        }
        // ]]>
    </script>
</head>
<body></body>
</html>

Ошибка

Если я открою указанный выше файл непосредственно в браузере (file:///LIFT_PROJECT/src/main/webapp/static/mouseViewTest.html)он работает, т.е. создается новый div.

Но если я запускаю его через Lift / Jetty (http://localhost:8080/static/mouseViewTest), я получаю следующую ошибку JavaScript:

Chrome:

Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7

Firefox (Firebug):

An invalid or illegal string was specified" code: "12

Сравнение источников в браузере

При сравнении источников страниц в браузере я вижу только одно отличие, а именно: Lift добавляетследующий JavaScript перед закрывающим тегом </body>:

<script type="text/javascript" src="/ajax_request/liftAjax.js"></script>    
<script type="text/javascript">
// <![CDATA[
var lift_page = "F320717045475W3A";
// ]]>
</script>

Вопросы

Кто-нибудь знает, почему это происходит?

Если я хочу переместитьКод JavaScript в файл Scala (с использованием поддержки Lift JavaScript и jQuery), как будет выглядеть код?

Обратите внимание: когда я использовал Jq("body") ~> JqAppend() для создания новых div, это работало.Я просто не знал, как проверить, существует ли div id.Вот почему я переместил код в шаблон, планируя использовать функцию Lift Call для выполнения функции JS.И вот, когда эти проблемы начались ...

Спасибо!

1 Ответ

1 голос
/ 17 августа 2010

Недавно я столкнулся с подобной проблемой, и, насколько я понял, проблема в том, что страница, обслуживаемая лифтом, обслуживается как XHTML, и есть некоторые проблемы при записи в DOM, если страница XHTML иHTML.Я не знаю, является ли это ошибкой в ​​jQuery или Safari или это просто невозможно в XHTML, но быстрый способ исправить это - изменить файл Boot.scala, чтобы Lift не использовал XHTML в качестве mime-типа.с этой строкой:

LiftRules.useXhtmlMimeType = false
...