Базовые функции событий JS изменяют объект - PullRequest
1 голос
/ 08 февраля 2012

Я работаю над довольно сложным приложением с BackboneJS.У меня есть объект Globals, который я использую для публикации / подписки на события.Проблема в том, что, похоже, нет эффективного средства для разделения функций с использованием архитектуры, управляемой событиями.

Я думаю о большей части системы обработки событий, такой как Magento.Видите ли, в Magento вы звоните dispatchEvent и передаете объект.В следующей строке в Magento (которая будет прерываться, т. Е. Она ожидает, что все подписчики на это событие выполнятся первыми), вы сможете снова получить доступ к этим объектам.Хорошая вещь с этим способом состоит в том, что любой функции, которая подписывается на событие, передается объект, который она может изменить, и затем возвращать этот объект.

Итак, когда подписчики закончили выполнение, мы можем взять этот измененныйобъект и закончить выполнение.В JS это был бы обратный вызов, но идея та же самая.

Итак, мои вопросы:

  • Вам известно о чем-то подобном, запеченном в Backbone?
  • Есть ли плагины, о которых вы знаете?

Спасибо за потраченное время!

1 Ответ

2 голосов
/ 08 февраля 2012

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

var M = Backbone.Model.extend({
    go: function() {
        var o = { };
        this.trigger('some:event', o);
        console.log(o);
    }
});

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

var m = new M;
m.on('some:event', function(o) {
    o.where_is = 'pancakes house?';
});
m.on('some:event', function(o) {
    o.ill_cook = 'you some eggs, Margie';
});
m.go();

Это оставит вас с {where_is: 'pancakes house?', ill_cook: 'you some eggs, Margie'} в o, когда вы нажмете на console.log вызов go.

Демо: http://jsfiddle.net/ambiguous/4XCmc/

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

...