Основная цель MVP - разделение различных аспектов кода. Обычно в JavaScript есть 3 основных таких аспекта:
- Обработка событий
- DOM манипуляции
- Связь с сервером (вызовы AJAX)
Для каждой из этих проблем есть соответствующий термин из MVP:
- EventHandling = Ведущий
- DOM Manipulation = Просмотр
- AJAX звонки = Модель
Поскольку реализовать 3 аспекта не всегда просто, шина EVENT BUS может пригодиться. Этот автобус должен быть одноразовым, и все события, поднятые в различных контекстах, должны публиковаться в автобусе. Докладчик должен зарегистрироваться на свои события и соответствующим образом реагировать на события.
Вот как это будет работать:
Первое, что происходит, это загрузка страницы. Послушайте это, используя обычную модель событий или jQuery или что угодно удобное. Создайте модель, вид и презентера. Ведущий должен хранить экземпляры View и Model, поскольку он будет их использовать.
var model = new Model();
var view = new View();
var presenter = new Presenter(model, view);
Помните, что Presenter является обработчиком событий, поэтому шина должна знать об этом и направлять события для обработки:
bus.registerHandler(presenter);
Первым событием является init, что означает, что страница загружена и все объекты MVP установлены:
bus.init(); // call this yourself
Это вызовет что-то в Presenter, например, функцию. Я предпочитаю соглашение об именовании, в этом примере Presenter.onInit (). Это дает возможность установить слушатели пользовательского интерфейса:
// in the Presenter
onInit: function() {
view.addSubmitListener();
view.addWhateverListener();
...
}
// in the View (using jQuery)
addSubmitListener: function() {
$("#submitButton").click(function() {
var formData = ...
bus.submit(formData); // publish an event to the bus
});
}
Когда нажата кнопка «Отправить», вызывается bus.submit (formData), и он направляет его обработчику
// in the Presenter
onSubmit: function(formData) {
model.postForm(formData, function(data) {
// handle the response
view.updateSomething(data);
});
}
И так далее ... Весь трюк привязывает шину к докладчику, и тогда вы в цикле.
НТН