我很想知道关于新的ember路由和控制器的哪一层逻辑是什么:
如果我们以下面的路线为例:
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
我的练习NewStep1Controller目前无逻辑:
WZ.ExercisesNewStep1Controller = Em.Controller.extend()
建议的建议似乎是让路由只需要使用控制器中的任何其他逻辑将正确的插座分配给正确的控制器。
我应该将控制器重构为:
WZ.ExercisesNewStep1Controller = Em.Controller.extend
createGroup: ->
@set 'groups', WZ.store.find(WZ.Group)
这是一个非常简单的例子,但我认为逻辑成立。
我对所有图层的位置感到困惑。我认为必须创建所有这些xxxController,xxxView文件以及它们之间的耦合,所以会产生少量开销。
我喜欢贪图,但我只想提出这一点。
答案 0 :(得分:5)
我与Tilde团队进行了一些交流,而Tom Dale告诉我们要遵循hvgotcodes提出的方式。
但是在与Peter Wagenet讨论之后发生了一个改进:作为对我interrogation的答复,Peter&耶胡达mitigated我们从汤姆解释的位置。
所以我会总结整个画面说:
原因是任何处理都应限定在给定路径中,这样可确保整个应用程序的连贯行为,而不会将所有可能的处理打开到应用程序的任何部分。
答案 1 :(得分:4)
在Sproutcore中(有人会说,如果这不适用于Ember,它来自Sproutcore),控制器应该几乎总是只是愚蠢的代理。他们什么都不做。
假设对于Ember来说这是正确的,我不会在那里移动逻辑。
建议的建议似乎是让路线得到照顾 使用任何其他控制器将正确的插座分配给正确的控制器 控制器中的逻辑。
我认为这是正确的。从我在网上看到的例子来看,路线只是状态。转到github, this link,您将看到路线延伸状态。因此,应在您的路由(即状态)中处理应用程序级事件。在这里,您将获得相关对象并将其放入适用的控制器中。
答案 2 :(得分:2)
https://speakerdeck.com/u/tomdale/p/emberjs-more-than-meets-the-eye幻灯片55.
事实上,我不知道它是否与当前的良好做法保持同步,但模型管理(创建/编辑/删除)似乎没有任何代表。在我看来,它必须完成以响应视图事件,以及在connectionsOutlets方法中。所以你的第一个例子对我来说很好。 此外,在这张幻灯片中,控制器应该包含非常少的逻辑...但是真正的"非常少的逻辑"?
您的问题对我来说非常重要,因为我们没有任何其他建议,特别是来自经验丰富的余烬用户。