3

我有一个字母过滤器视图(a、b、c、d 等),很多视图都将使用它。我在主视图上设置了一个方法,使用单击的字母从 API 中获取结果。

我通过将回调函数向下传递给字母过滤器来设置它,如下所示:

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

调用 filterCallback 并传递参数有效,但是现在调用的 paginationFilter 方法属于字母过滤器。

问题:如何调用父视图的方法并保持方法与原始顶视图的关系?

4

3 回答 3

4

您应该使用类似的东西在子视图中触发一个事件

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

并从父视图中收听

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

(建议给事件一个合适的名称。考虑一个名称,例如“page:change”。“page”是一种命名空间,只是为了让大型应用程序中的事件更容易命名和组织。没有真正的命名空间功能。)

于 2013-06-05T07:27:17.187 回答
4

您可以通过以下两种方式进行:

  1. 将父视图传递给您的子视图,或者让您的子视图通过全局对象找到其父视图(如果您正在使用一个)。从子视图调用父视图的函数

  2. 当您需要调用父视图的函数时,您可以让子视图引发事件。您的父视图应该从您的子视图监听此事件,并通过调用所需的方法来响应。

于 2013-06-05T03:57:32.673 回答
0

AlphabetFiltersIndexView您可以在您的initialize方法中使用以下下划线调用

_.bindAll(callBackContext, "YourCallBack");

这将确保回调绑定到您选择的对象(父视图)。

您可以将callBackContext"YourCallBack"作为参数传递给AlphabetFiltersIndexView,然后您可以根据父视图的上下文对其进行控制。

于 2013-06-05T03:58:05.293 回答