2013-06-05 6 views
3

У меня есть вид фильтра алфавита (a, b, c, d и т. Д.), Который будет использовать множество просмотров. У меня есть метод на основном представлении для получения результатов из API с помощью щелчка.Магистраль: как вызвать методы в родительском представлении

я установка, передав функцию обратного вызова вплоть до алфавита фильтра согласно ниже:

view = new App.Views.Common.AlphabetFiltersIndexView(filterCallback: @paginationFilter) 
@$(".pagination-vertical").replaceWith(view.render().el) 

Вызова filterCallback и передаче аргументов работает, однако метод paginationFilter называется теперь принадлежит алфавиту фильтрам.

Вопрос: Как вызвать метод родительского представления и сохранить связь метода с исходным видом сверху?

ответ

4

Вы могли бы идти об этом двух способах:

  1. Pass родительского представления на ваш взгляд ребенка, или ваш взгляд ребенка найти свой родитель с помощью глобального объекта, если вы используете один. Вызовите функцию родительского представления от ребенка

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

+0

Я развиваюсь как mall, используя описанный вами метод №2. Существуют ли какие-либо структурные проблемы или проблемы с производительностью, которые я должен учитывать при использовании подхода, управляемого событиями? – Prefix

+0

@Prefix Я бы просто удостоверился, что вы отключите прослушиватели событий, когда вы уничтожаете представление parent/child. Я не думаю, что в этом есть много. Тем не менее, я не сделал много базовых разработок в течение года. Не знаете, как изменился ландшафт. – damienc88

0

Вы можете использовать следующую Underscore вызова в вашем AlphabetFiltersIndexView в это initialize метод

_.bindAll(callBackContext, "YourCallBack"); 

Это обеспечит обратный вызов, связанный с объектом вашего выбора (Родитель вид).

В качестве параметров AlphabetFiltersIndexView вы можете передать значения callBackContext и "YourCallBack", которые затем можно контролировать в зависимости от контекста родительского представления.

4

Вы должны инициировать событие в представлении ребенка, используя что-то вроде

this.trigger('event', [args]); 

и слушать его от родительского вида

this.listenTo(childView, 'event', this.paginationFilter); 

(рекомендуется давать этому событию имя собственное. Рассмотрим имя например, «page: change». «page» является своего рода пространством имен, чтобы упростить запись и организацию событий в большом приложении. Нет реальной функциональности пространства имен.)

+0

Обратите внимание, что если это событие требуется только для ответа на одно время, вы также можете использовать 'listenToOnce()', который отключит себя после перехвата одного события. – Prefix