Application.vent或触发器('eventname')到父级,直到它到达您的控制器?

时间:2014-03-02 01:12:52

标签: marionette

我刚刚开始我的第二个marionettejs应用程序。我正在使用requirejs。 我有点困惑如何处理从我的控制器上的子视图触发的事件(例如controller-> compositeView-> itemview或controller-> compositeview-> layout-> compositeview-> itemview)

我尝试了这些并且两者都正常工作: - application.vent - 让直接父级侦听然后触发相同的事件并让其父级监听它并重复此过程直到它到达控制器

我的问题是我应该使用哪一个或者首选哪一个?

谢谢

1 个答案:

答案 0 :(得分:1)

我希望让控制器在可能的情况下处理App.vent

在你的情况下,控制器通常负责准备复合视图,因此控制器很容易监听composteView的itemViews中的事件,前缀为itemview

假设你有一个itemView

class QuestionView extends Marionette.ItemView
  triggers:
    'click .read-more' : 'read:more:clicked'

然后是一个复合视图

class QuestionsView extends Marinontee.CompositeView
  itemView: QuestionView

然后在控制器中通常需要准备compositeView

questionsView = new QuestionsView
  collection: question

现在,您可以使用“itemview”前缀轻松收听此控制器中问题itemView中的事件,然后使用此 exact itemView 作为参数触发应用级别曝光。

@listenTo questionsView, 'itemview:read:more:clicked', (itemView) ->
  App.vent.trigger 'process:this:view:event', (itemView)