Функции событий Backbone JS изменяют объект

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

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

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

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

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

Спасибо за уделенное время!


person Joseph at SwiftOtter    schedule 07.02.2012    source источник


Ответы (1)


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

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 имеют свои собственные определенные списки аргументов для прослушивателей, конечно, но вы можете добавить любые пользовательские события, которые вам нужны.

person mu is too short    schedule 07.02.2012