Используя Grails автономный GORM

Только, чтобы сделать некоторые продолжают, я основывал свой код реализация Robert Nyman, отправленная Shog9, но отбыл немного из его точной версии по трем причинам:

  1. Он позволил Вам выбирать корневой элемент и тип тега для фильтрации результатов. Мне не нужна та функциональность, и так путем удаления ее я смог упростить код значительно.
  2. первая вещь, которую делает его код, видят, существует ли рассматриваемая функция уже, и если это делает он обеспечивает свою собственную реализацию так или иначе. Это просто казалось... нечетным. Я понимаю, что он добавлял функциональность к оригиналу, но снова: я не использую те функции.
  3. я хотел дополнительный бит синтаксического сахара - чтобы быть в состоянии назвать его как я буду звонить document.getElementById() или document.getElementsByTagName().

Примечание, что я все еще положился главным образом на его код. Его навыки JavaScript, очевидно, далеко вне моего собственного. Я действительно пытался факторизовать некоторые избыточные переменные, но это об этом.

, Имея это в виду, вот то, с чем я закончил (, кажется для работы в IE6, IE7, Firefox 3, и Chrome видит новое примечание в конце ):

 if (!document.getElementsByClassName)
    document.getElementsByClassName = function (className)
{
    var classes = className.split(" ");
    var classesToCheck = "";
    var returnElements = [];
    var match, node, elements;

    if (document.evaluate)
    {    
        var xhtmlNamespace = "http://www.w3.org/1999/xhtml";
        var namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace:null;

        for(var j=0, jl=classes.length; j<jl;j+=1)
            classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 

        try
        {
            elements = document.evaluate(".//*" + classesToCheck, document, namespaceResolver, 0, null);
        }
        catch(e)
        {
            elements = document.evaluate(".//*" + classesToCheck, document, null, 0, null);
        }

        while ((match = elements.iterateNext()))
            returnElements.push(match);
    }
    else
    {
        classesToCheck = [];
        elements = (document.all) ? document.all : document.getElementsByTagName("*");

        for (var k=0, kl=classes.length; k<kl; k+=1)
            classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));

        for (var l=0, ll=elements.length; l<ll;l+=1)
        {
            node = elements[l];
            match = false;
            for (var m=0, ml=classesToCheck.length; m<ml; m+=1)
            {
                match = classesToCheck[m].test(node.className);
                if (!match) break;
            }
            if (match) returnElements.push(node);
        } 
    }
    return returnElements;
}

Обновление:
Одно новое примечание по этому. Я с тех пор перечитал примечания по исходной реализации, и я понимаю теперь, когда мой код мог падать в случае, где существующий браузер имеет свою собственную реализацию, потому что реализации по умолчанию возвращают nodelist, куда это возвращает массив. Это включает более свежий Firefox и сафари и оперные браузеры. Большую часть времени это не будет иметь значения, но в некоторых ситуациях это могло. Это объясняет, что объект № 2 от упоминает выше.

то, Что это означает, - то, что, в то время как мой код технически работает везде, он мог привести к тонко отличающемуся (чтение: трудно для отладки), поведение в различных местах, и это не хорошо. Я должен прикреплять это или к также возврату nodelist или переопределять предоставленный метод для возврата массива (который является тем, что оригинал сделал). Вероятно, первый был бы более простым, но что последний будет лучше .

Однако это работает в данный момент в локальной среде интранета (в значительной степени весь IE), так же в настоящее время я оставлю фиксацию как осуществление для читателя.

12
задан Daff 28 October 2009 в 12:17
поделиться

1 ответ

Насколько мне известно, GORM можно использовать отдельно, начиная с Grails 1.1. Это позволяет вам использовать GORM в качестве ORM, не используя полную структуру Grails

. Однако я не думаю, что можно использовать GORM вне Spring (который является фундаментом, на котором построен Grails). Подведем итоги:

  • Вы можете использовать GORM без Grails
  • Вы не можете использовать GORM без Spring

Пример приложения, демонстрирующий, как использовать GORM вне Grails, доступен здесь . Если вы хотите просмотреть исходный код этого примера в браузере (вместо того, чтобы извлекать его из репозитория SVN), начните здесь .

6
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: