2012-07-26 82 views
7

我很好奇,想知道刚才是什么逻辑在于该层相对于新的余烬路由和控制器:灰烬路由器和控制器逻辑

如果我们把下面的路线为例:

step1: Ember.Route.extend 
    route: '/step1' 
    connectOutlets: (router, event) -> 
     exercise = WZ.Exercise.createRecord() 
     router.get('exercisesNewStep1Controller').set 'groups', WZ.store.find(WZ.Group) 
     router.get('exercisesNewController').connectOutlet 'step', 'exercisesNewStep1', exercise 

我ExercisesNewStep1Controller目前logicless:

WZ.ExercisesNewStep1Controller = Em.Controller.extend() 

推荐意见似乎是有路线只取分配正确的出口,以正确的控制器机智的护理h控制器中的任何其他逻辑。

我应该修改我的控制器是这样的:

WZ.ExercisesNewStep1Controller = Em.Controller.extend 
    createGroup: -> 
    @set 'groups', WZ.store.find(WZ.Group) 

这是一个很简单的例子,但我认为逻辑成立。

我有点困惑,在哪里与所有的层。我认为有必要创建所有这些xxxController,xxxView文件以及它们之间的耦合,从而产生少量开销。

我喜欢余烬,但我只是想提出这一点。

回答

2

https://speakerdeck.com/u/tomdale/p/emberjs-more-than-meets-the-eye幻灯片55

其实我不知道这是否是上最新与当前的良好做法,但该模型管理(创建/编辑/删除)似乎没有在任何地方表示。在我看来,它必须响应查看事件和连接方法。所以你的第一个例子对我来说很好。 此外,在这张幻灯片中,控制器应该包含非常少的逻辑......但真正“非常小的逻辑”是什么?

您的问题对我来说非常重要,因为我们没有任何其他建议,特别是来自有经验的ember用户。

4

在Sproutcore(如果这不适用于来自Sproutcore的Ember,有人会说出来),控制器应该几乎总是只是哑巴代理。他们什么都不做。

假设对Ember有效,我不会在那里移动逻辑。

推荐意见似乎是有路线只取 照顾控制器的任何其他 逻辑分配正确的出口,以正确的控制器。

我认为这是正确的。从我在网上看到的例子来看,路线就是国家。去github, this link,你会看到路线延伸国家。所以应用级别的事件应该在您的路由(即州)中处理。在这里你会得到相关的对象并将它们放入适用的控制器中。

5

我与蒂尔德团队进行了几次交流,汤姆戴尔教导我们遵循hvgotcodes提出的方式。

但随着彼得Wagenet商量后发生细化:至于我interrogation,彼得&耶胡达mitigated位置的回复,我们从汤姆的解释举行。

所以我总结整个画面说:

  • 行为应该在一个较高级别的路由的事件处理程序进行编码,
  • 但工厂化低级原可(/应注意什么?)在控制器中本地化。

原因是任何处理都应该限定在给定的路径中,这确保了整个应用程序的连贯行为,而不是向应用程序的任何部分打开所有可能的处理。