Мне нужен был способ использовать веб-сервис JSON для управления такими вещами, как оповещения и обновления на стороне клиента, без того, чтобы клиент инициировал действие. Я надеюсь обновить это, чтобы использовать веб-сокеты, но сейчас это временное извлечение, и каждое извлечение включает задержку для следующего извлечения, так что я даже могу управлять этим, как только клиент загрузит мою систему.
Я также использую show / expire и moment.js для фильтрации по дате и затем использую куки с идентификатором каждого предупреждения (не показано здесь), чтобы предотвратить дублирование уведомлений. Это идет хорошо, и я мог бы просто решить собрать это как библиотеку в ближайшее время, если у меня будет достаточно интереса.
Бит, специфичный для этого вопроса, состоит из 2 частей; 1) JSON, который включает параметры для jQuery.dialog () и 2) код для использования этого JSON и создания диалога. Ключевым моментом здесь является обратить внимание на то, как я ссылаюсь на параметры объекта 'n' и использую их для динамического создания диалога. Объект tDlg является большой частью этого, поскольку именно он в конечном итоге представляет диалог и передается в $ (). Dialog ()
Фрагмент JSON, включающий параметры моего диалога:
"doAlert":{
"modal":false
,"height":240
,"width":380
,"title":"Welcome to the new BatchManager"
,"body":"<div style='text-align:center;'>Welcome to the new and enhanced<br/>BatchManager!</div><div style='text-align:center;'>Enjoy!</div>"
,"buttons":[
{
"text":"Ok"
,"click":"$(this).dialog('close');"
}
]
}
Фрагмент JavaScript (с использованием jQuery) для инициализации диалога на основе моего JSON (n соответствует doAlert, который является частью массива «уведомлений» в этом примере):
var tDlg = {
resizable: false,
height: (n.doAlert.height) ? n.doAlert.height : 240,
width: (n.doAlert.width) ? n.doAlert.width : 240,
modal: (n.doAlert.modal) ? n.doAlert.modal : true,
dialogClass: "dlgFont"
};
if (n.doAlert.buttons) {
tDlg.buttons = [];
$.each(n.doAlert.buttons, function (i, n) {
tDlg.buttons.push({
text: n.text,
click: new Function(n.click)
})
})
}
$('<div class="dlgFont" title="' + n.doAlert.title + '"><p><span class="ui-icon ui-icon-circle-check" style="float: left; margin: 0 7px 50px 0;"></span>' + n.doAlert.body + '</div>').dialog(tDlg);