Организация исходного файла

Расширение других отвечает здесь

Распространение событий: Происходящие события от самого внутреннего до управления outmost.

Событие captuing: Происходящие события от наиболее удаленного до самого внутреннего управления.

addEventListener() метод используется для позволения/запрещения получения события и распространения событий. Этот метод имеет три параметра. Если третий параметр (фаза) имеет значение true получение события, включен и если это имеет значение false распространение событий, включен (это - поведение по умолчанию).

, Если Вы хотите, чтобы и даже пузырение и получение были включены, затем присвойте обработчики 2 раза, однажды с набором параметра фазы ко лжи и однажды с набором параметра фазы к истинному как показано ниже.

<html>
<head>
    <style type="text/css">
        .divStyle
        {
            display: table-cell;
            border: 5px solid black;
            padding: 20px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="DIV1" class="divStyle">
        DIV 1
        <div id="DIV2" class="divStyle">
            DIV 2
            <div id="DIV3" class="divStyle">
                DIV 3
            </div>
        </div>
    </div>
    <script type="text/javascript">
        var divElements = document.getElementsByTagName('div');

        for (var i = 0; i < divElements.length; i++)
        {
            divElements[i].addEventListener("click", clickHandler, false);
            divElements[i].addEventListener("click", clickHandler, true);
        }

        function clickHandler()
        {
            alert(this.getAttribute("id") + " click event handled");
        }
    </script>
</body>
</html>

отметьте: IE8 и более ранние версии не поддерживают addEventListener () метод. Это подразумевает, что получение события не поддерживается в IE8 и более ранних версиях, и следовательно вышеупомянутый код не будет работать в IE 8 и более ранних версиях.

9
задан links77 5 September 2009 в 11:57
поделиться

4 ответа

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

Для организации самой структуры каталогов библиотеки, прямо сейчас я остановился на примерно следующей структуре

  • library1 / widget.h
  • library1 / private / onlyinlib.h
  • library1 / private / widget.cpp

(и если применимо)

  • library1 / private / resources / widget.jpg
  • library1 / private / project / widget.xcode

Я помещаю все заголовки непосредственно в путь к библиотеке и иметь подпапку private , которая будет содержать все, что используется только библиотекой, но никогда не должно быть общедоступным / раскрытым.

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

#include "library1/widget.h"

частные включения просто

#include "onlyinlib.h"

Это имеет ряд преимуществ:

  • Если вводятся новые библиотеки, не нужно вмешиваться в настройки проекта / компилятора, чтобы сделать заголовки «видимыми» .
  • Переход на другие компиляторы / платформы также не вызывает затруднений.
  • Заголовки автоматически «помещаются в пространство имен», то есть, включая часть пути, почти невозможно получить конфликт имен с включениями
  • Это сразу очевидно, откуда берется заголовок и является ли заголовок частью публичного интерфейса или нет
3
ответ дан 4 December 2019 в 23:40
поделиться

Если вы должны включить сторонний код вместо того, чтобы просто связываться с предварительно скомпилированной версией (например, возможно, вам нужно внести в нее изменения или настройки), подумайте о ветвлении ] его во всем, что вы используете для управления исходным кодом:

  • / trunk / ... --- ваш код находится здесь
  • / thirdparty --- оригинальные копии сторонних библиотек находятся здесь
    • / thirdparty / lib1
    • / thirdparty / lib2
    • и т. Д.
  • / trunk / lib1 --- разветвлен от: / thirdparty / lib1, возможно с локальными изменениями
    • это версия, которую вы собираете / связываете.

Если вы используете достойную систему контроля версий, эта схема позволит вам легко обновиться до более новых версий сторонних библиотек, а затем объединить эти изменения с изменения, внесенные вами локально.

Например, предположим, что "lib1"выпускает новую версию:

  • Зафиксируйте изменение в /thirdparty/lib1.[1285 visibleMerge из / thirdparty / lib1 в / trunk / lib1
  • Устраните любые конфликты слияния .

Это, ИМО, единственный разумный способ выполнить обновление сторонних библиотек, в которые вы внесли локальные изменения.

1
ответ дан 4 December 2019 в 23:40
поделиться

Я не думаю, что есть правильный способ сделать это - это будет зависеть от того, чего именно вы пытаетесь достичь.

Вот некоторые вещи, которые вы может не знать:

  • Вы можете использовать относительные пути в своих проектах.

  • Вы можете использовать переменные среды в путях.

  • Вы можете добавлять каталоги в правила поиска Visual Studio.

Это дает вам немного больше контроля над тем, куда вы помещаете включаемые файлы, и если вы добавляете свои папки в правила поиска Visual Studio, вам вообще не нужно включать какие-либо пути.

2
ответ дан 4 December 2019 в 23:40
поделиться

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

Второе: вы должны добавить в свой проект все используемые библиотеки / исходные файлы. Это можно сделать либо в проводнике проекта, либо на вкладке Project-> Linker. В последнем случае вам также придется добавить используемые каталоги в пути к библиотекам проектов.

Обычно не рекомендуется использовать пути в директивах #include.

0
ответ дан 4 December 2019 в 23:40
поделиться
Другие вопросы по тегам:

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