2013-02-12 3 views
0

У меня есть вопрос jQuery/jGrowl, касающийся того, как поддерживать состояние представленных jGrowls. У меня есть система уведомлений, которую я создал с помощью PHP/MySQL. Это легкая часть. Мне удалось правильно отобразить jGrowls.jGrowl и Close Callback для запроса Ajax?

Теперь я хотел бы поддерживать состояние сообщений/jGrowls, пока пользователь не нажмет на «Закрыть» для каждого отдельного jGrowl или ссылки «закрыть все», которая закрывает все jGrowls. У меня есть таблица MySQL users_notifications, где я могу управлять тем, какие уведомления были «прочитаны». Я предполагаю, что наилучшим подходом было бы сделать запрос getJSON (ajax) обратно на сервер, используя обратные вызовы close() или beforeClose(), но я не уверен, как это записать. Мне нужно передать идентификатор уведомления обратно через запрос.

Обновление 02/12: Я думаю, что узнал, что меня смущает.

При тестировании я использовал 2 или 3 уведомления (jGrowls). Я ожидал, что функция обратного вызова beforeClose() будет срабатывать, когда пользователь нажимает на отдельную ссылку jGrowl close, ссылку «x» в правой части jGrowl. Есть ли обратный вызов для закрытия «x»? Обратите внимание, что обратный вызов beforeClose() срабатывает корректно, когда пользователь нажимает «закрыть все» и запускает функцию для каждого jGrowl. Итак, в некотором смысле, «закрыть все» действует как ссылка «Отметить все как прочитано», а ссылки «x» ничего не делают. Является ли это предполагаемой функциональностью?

ответ

1

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

Так используя обратный вызов может выглядеть следующим образом:

$.jGrowl('Message here...', { 
    beforeClose: function(){ 
     $.ajax({ 
      url: '/path/to/dismiss/action', 
      success: function(){} 
     }); 
    } 
}); 

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

$.jGrowl.defaults.beforeClose = function(){ 
    //... 
} 

Я думаю, что вы необходимо будет отслеживать уведомление индивидуально, так, когда вы делаете запрос ajax для его удаления, вы будете передавать первичный ключ или что-то в этом роде. Одна вещь, которую я хотел бы предложить, - использовать обратный вызов beforeOpen и использовать метод data() для установки уникального идентификатора для вашего первичного ключа. Таким образом, это связано с настройкой вашего сообщения, и вы можете ссылаться на него позже, когда его увольняют, не беспокоясь о том, чтобы перехватывать информацию в другом месте.

Надеюсь, это поможет!

+0

Спасибо, что ответили на этого Стэна. Я действительно не ожидал ответа автора или jGrowl. Что касается beforeClose(), я добавил некоторые дополнительные комментарии выше (Update 02/12). Кажется, я не могу закрыть 'x', чтобы вызвать функцию обратного вызова beforeClose(). Кажется, что «закрыть все» запускает beforeClose(). – jjwdesign

+0

Дальнейшая проверка: если я использую обратный вызов close(), то нажатие на кнопку «x» или «закрыть все» вызовет функцию обратного вызова close(). С closeBefore() я вижу только триггер на «закрыть все». – jjwdesign

+0

Упс! Индивидуальное закрытие, не запускающее beforeClose(), на самом деле является ошибкой. Я подал его на github и исправит его сегодня вечером. FYI: https://github.com/stanlemon/jGrowl/issues/4 – stanlemon