Вот еще одна оптимизированная версия, которая также обрабатывает закрытие : hover
. Вам нужно будет инкапсулировать свой сайт с помощью
<div id="container"></div>
, чтобы он мог Работа. Просто положить закрывающее событие на тело ничего не сделало
var bodyBound = false;
var container;
if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/iPad/i))
{
container = $("#container");
// Provoke iOS :hover event
$("a.someLink").on("mouseover", handleHoverClick);
}
function handleClose(event)
{
container.off("click", handleClose);
bodyBound = false;
}
function handleHoverClick(event)
{
if (!bodyBound)
{
bodyBound = true;
// Somehow, just calling this function—even if empty—closes the :hover
container.on("click", handleClose);
}
}
Да, я решил эту проблему с моим коллегой следующим образом:
CREATE TABLE [dbo].[Schedule](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NULL
)
CREATE TABLE [dbo].[ScheduleInterval](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ScheduleID] [int] NOT NULL,
[ScheduleIntervalUnitID] [int] NOT NULL,
[Interval] [smallint] NOT NULL
)
CREATE TABLE [dbo].[ScheduleIntervalUnit](
[ID] [int] NOT NULL,
[Name] [varchar](50) NULL
)
INSERT INTO ScheduleIntervalUnit (ID, Name)
SELECT '1' AS [ID], 'Day' AS [Name] UNION ALL
SELECT '2' AS [ID], 'Week' AS [Name] UNION ALL
SELECT '3' AS [ID], 'Month' AS [Name]
Расписание охватывает определенный промежуток времени, и интервалы возникают в течение этого промежутка времени. Единица интервала расписания определяет продолжительность интервала (дни, как в «каждый второй» (2) или «каждый третий» (3) и т. Д.), Неделю (день недели, например, понедельник, вторник и т. Д.) И месяц (календарного года). Используя это, вы можете выполнять запросы и логику к своей базе данных для получения расписаний.
Если ваши расписания требуют лучшего разрешения - вплоть до часов, минут, секунд - посмотрите на реализацию Unix cron
. Первоначально я пошел по этому пути, но обнаружил, что приведенный выше подход является гораздо более упрощенным и поддерживаемым.
Чтобы записать правила «периодического повторения», вы можете почерпнуть вдохновение из формата crontab , за исключением, конечно, того, что вам не нужны ограничения на минуты и часы, а точнее день недели, день месяца и т.п. Поскольку в расписании может быть более одного (например) дня недели, для целей NF вам понадобятся типичные промежуточные таблицы, которые используются для представления отношений «многие ко многим», то есть одна с двумя внешними ключами на строку (одна для основной таблицы событий , один в таблицу дней недели) - и аналогично, конечно, для дней месяца и т. д.
Предположительно, каждое запланированное событие тогда также будет иметь продолжительность, категорию, возможно, местоположение, имя или описание описание.
"Насколько нормальна" форма (если вы позаботились о "наборах" с упомянутым выше отношением многие-многие) в основном зависит от того, зависят ли эти различные атрибуты друг от друга и как, например, если каждое событие в определенной категории имеет одинаковую продолжительность, вам нужно иметь отдельную вспомогательную таблицу с идентификатором, категория и продолжительность, и используйте внешние ключи в этой таблице, а не повторяйте парную информацию. Но из того, что вы говорите, я не вижу внутреннего нарушения правил нормальной формы, за исключением таких возможностей зависимости (которые не присущи тому немногому, что вы указали о планировании событий).
и используйте внешние ключи в этой таблице, а не повторяйте парную информацию. Но из того, что вы говорите, я не вижу внутреннего нарушения правил нормальной формы, за исключением таких возможностей зависимости (которые не присущи тому немногому, что вы указали о планировании событий). и используйте внешние ключи в этой таблице, а не повторяйте парную информацию. Но из того, что вы говорите, я не вижу внутреннего нарушения правил нормальной формы, за исключением таких возможностей зависимости (которые не присущи тому немногому, что вы указали о планировании событий).