backbone.js: невозможно запустить пользовательское представление из родительского представления и привязать к нему дочернее представление - PullRequest
0 голосов
/ 15 марта 2012

У меня есть родительское базовое представление, которое создает новое базовое представление в своем методе рендеринга.

var appView = Backbone.View.extend({
    ...
    render: function() {
        preview = new previewDataView({model: model, el: $el.find('.preview-container')});
    }
});

Я хочу иметь возможность запускать пользовательское событие в appView и иметь привязку previewDataView к нему - возможно ли это?previewDataView не получил событие, когда я попробовал это.Мысли?

1 Ответ

2 голосов
/ 15 марта 2012

Я думаю, вы могли бы сделать это двумя способами.Сначала передайте родительский элемент в дочерний вид.Во-вторых, создайте eventAggregator, который обрабатывает запуск событий.

FIRST:

Вы можете передать appView в previewDataView в качестве параметров.

preview = new previewDataView({ // your options, 'parent':this });

В вашем previewDataView вы быпривязать к родительскому настраиваемому событию следующим образом:

this.parent = this.options.parent;
this.parent.bind('eventName', this.onEvent, this);

ВТОРОЕ: (только что изучил эту технику)

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

В комментариях @Brian Genisio делает еще один шаг, чтобы включить этов его коде:

Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events);

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

// Parent View
this.eventAggregator.trigger('someEvent');

// Child View
this.eventAggregator.bind('someEvent', this.function, this);

При этом вам не нужно явно передавать ссылку между представлениями, которым нужен доступ друг к другу для запуска событий и прослушивания.Этот метод очень удобен для меня.: -)

...