Незаметный JavaScript запутывает обработку событий

public static <T> T fromXml(Class<T> clazz, String xml) {

Названный как:

Thing thing = fromXml(Thing.class, xml);

или более явно:

Thing thing = MyClass.<Thing>fromXml(Thing.class, xml);

, Чтобы еще более сбивать с толку у Вас могут быть конструкторы, что и создайте универсальный тип и имейте универсальный параметр сами. Не может помнить синтаксис и никогда не видели, что он использовал в гневе (Вы, вероятно, более обеспечены со статическим методом создания так или иначе).

бросок (T) небезопасен, и Вы не можете записать T.class. Поэтому включайте T.class как аргумент (как JAXBContext.newInstance делает), и выдайте соответствующее исключение, если тип является неправильным.

public static <T> T fromXml(Class<T> clazz, String xml) {
    try {
        JAXBContext context = JAXBContext.newInstance(clazz);
        Unmarshaller um = context.createUnmarshaller();
        Object obj = um.unmarshal(new StringReader(xml));
        try {
            return clazz.cast(obj);
        } catch (ClassCastException exc) {
             throw new RelevantException(
                 "Expected class "+clazz+
                  " but was "+obj.getClass()
             );
        }
    } catch (JAXBException exc) {
        throw new RelevantException(
            "Error unmarshalling XML response",
            exc
         );
    }
}

я верю следующей версии JAXB (в 6u14?) имеет некоторые удобные методы для этого вида вещи в JAXB класс.

6
задан C. Ross 6 October 2009 в 18:30
поделиться

5 ответов

Как правило, это невозможно. В истории ветвей ветвление и слияние до того, как именованная ветка была разветвлена, и промежуточная ветвь из двух именованных ветвей выглядят одинаково.

В git ветки - это просто текущие имена подсказок разделов истории. На самом деле у них нет сильной идентичности.

Обычно это не большая проблема, так как база слияния (см. Ответ Грега Хьюгилла) двух коммитов обычно гораздо более полезна, давая самую последнюю фиксацию, которую две ветки shared.

Решение, основанное на порядке родителей коммита, очевидно, не будет работать в ситуациях, когда ветвь была полностью интегрирована в какой-то момент истории ветки.

4
ответ дан 8 December 2019 в 14:44
поделиться

Посмотрите Визуальное событие ... это букмарклет, который можно использовать для отображения событий на странице.

8
ответ дан 8 December 2019 в 14:44
поделиться

Чтобы ответить на ваш вопрос, попробуйте использовать командную строку Firebug. Это позволит вам использовать JavaScript, чтобы быстро захватить элемент по идентификатору, а затем перебрать его слушателей. Часто, если использовать console.log, вы даже сможете получить определения функций.


Теперь, чтобы защитить ненавязчивый:

Преимущество, которое я нахожу в ненавязчивом JavaScript, состоит в том, что для меня это намного проще чтобы увидеть DOM такой, какая она есть. Тем не менее, я считаю, что вообще плохая практика создавать анонимные функции (за некоторыми исключениями). (Самая большая ошибка, которую я обнаружил в JQuery, на самом деле находится в их документации. Анонимные функции могут существовать в потустороннем мире, где сбой не приводит к полезному результату, но JQuery сделал их стандартными. Обычно я придерживаюсь политики использования анонимных функций только в том случае, если мне нужно использовать что-то вроде bindAsListener из Prototype.

Кроме того, если файлы JS правильно разделены, они будут обращаться только к одному подмножеству DOM за раз. . У меня есть библиотека «упорядоченного флажка», она находится в только одном файле JS, который затем повторно используется в других проектах. У меня также, как правило, все методы данной подбиблиотеки в качестве методов-членов объекта JSON или класса, и у меня есть один объект / класс для каждого файла js (как если бы я делал все на более формализованном языке ). Если у меня возникнет вопрос о моем «коде проверки формы», я посмотрю на объект formValidation в formvalidation.js.

В то же время я согласен, что иногда это может стать тупым путь, особенно когда имеешь дело с другими. Но неорганизованный код - это неорганизованный код, и его невозможно избежать, если вы не работаете в одиночку и не являетесь хорошим программистом.

В конце концов, я бы предпочел использовать / * * / , чтобы закомментировать большую часть двух или трех файлов js, чтобы найти некорректный код, а затем просмотреть HTML и удалить атрибуты onclick. .

2
ответ дан 8 December 2019 в 14:44
поделиться

Называть это «kool-aid» кажется несправедливым. События DOM уровня 2 решают определенные проблемы со встроенной обработкой событий, такие как конфликты, которые всегда возникают. Я не возвращаюсь к написанию кода для использования window.onload , который должен проверять, назначал ли его кто-то еще раньше, а иногда и случайно или из-за небрежности. Это также обеспечивает лучшее разделение уровней структуры (HTML) и поведения (JS). В общем, это хорошо.

Что касается отладки, я не думаю, что есть какой-либо способ решить, что обработчики событий являются анонимными функциями, кроме как приучать авторов использовать именованные функции там, где это возможно. Если можете, скажите им, что это создает более значимые стеки вызовов и делает код более удобным для сопровождения.

кроме приставания к авторам использовать по возможности именованные функции. Если можете, скажите им, что это создает более значимые стеки вызовов и делает код более удобным для сопровождения.

кроме приставания к авторам использовать по возможности именованные функции. Если можете, скажите им, что это создает более значимые стеки вызовов и делает код более удобным для сопровождения.

1
ответ дан 8 December 2019 в 14:44
поделиться

Одно: вы не должны видеть, что произойдет в JavaScript, глядя на HTML-код. Что это за неприятность? HTML предназначен для структуры.

Если вы хотите проверить, какие события привязаны к определенным элементам, на данный момент есть букмарклет, называемый визуальным событием, а в firebug 1.6 (IIRC) будет своего рода инспектор событий.

1
ответ дан 8 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

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