2015-06-21 65 views
0

我有一个Ember 1.10应用程序,支持2种模型,学生和家长的API支持,以及每种模型的基本CRUD设置,以及读/写消息的能力学生和家长访问他们各自的/展示页面时。命名空间,共享模型,在Ember中重复使用控制器

我必须创建一个收件箱,其中的信息以及学生和家长的所有其他数据都可用,并且必须这样做,但无法更改或添加到api(即,我可以'创建消息端点) 。

基本上,我需要保持学生和家长模型和控制器,因为他们,但需要能够从收件箱下的命名空间,像这样的路线访问它们:

Students 
    -inbox 
    -index 
    -edit 
    -show 
Parents 
    -inbox 
Inbox 
    StudentInbox <-- should use StudentsRoute and StudentsController 
    -index 
    -show 
    -edit 
    ParentInbox 
    -index 
    -show 
    -edit 

让来访/收件箱/ students/123将使用StudentRoute中定义的模型以及StudentController上定义的动作和属性。 InboxStudentsShowRoute应同样有权访问StudentsShowRoute和控制器。

不是从Student和Parent路由和控制器复制并粘贴现有代码,而是有办法将从Inbox命名空间下的模板触发的操作代理到相关的模型和控制器,并保持传递参数的能力。

例如,传入PARAMS像?unread=true而InboxStudentsShow路线上会通过这些向StudentsShowRoute和控制器(和气泡适当地到它的父路线和控制器)或编辑从学生/收件箱学生/ 123 /编辑模板会像在学生/ 123 /编辑模板上一样工作?

Ember新手,并且知道必须有更好的方式来重用名称空间中的现有代码和代理操作。任何建议将不胜感激!

回答

1

我会在这里创建一个Mixin,其中包含路由的相同代码,并在InboxStudentsShowRoute中指定controllerNametemplateName。然后,你在这两条路线上从这个Mixin延伸。模型,模板,动作,属性将相同。

例如,传递params中什么样的?未读=真,而在 InboxStudentsShow路线会通过这些向StudentsShowRoute和 控制器(和气泡适当地到它的父路线和 控制器)

我不确定这里的pass these to the StudentsShowRoute and Controller是什么意思,但是在一条路由上更改的CONTROLLER属性应该在另一条路由中保持不变,因为控制器在Ember中是单身。通过将查询参数传递给另一个路由,我不知道你是什么意思,因为如果你转换到你的应用的其他部分,你改变了URL并且你不能同时拥有2个urls,那么如何通过查询参数到另一条路线?

在Ember 1.10查询参数在控制器中定义,所以我猜行为将保持不变。的InboxStudentsShowRoute

实施例(移动代码从StudentsShowRouteStudentsShowMixin,定义控制器和模板的名称):

import Ember from 'ember'; 
import StudentsShowMixin from '../mixins/students-show'; 

export default Ember.Route.extend(StudentsShowMixin, { 
    controllerName: 'students/show', 
    templateName: 'students/show' 
}); 
+0

谢谢,丹尼尔。我的意思是通过传递查询参数,因为我希望在InboxStudentsShow模板上执行的操作能够更改和过滤在StudentsShow中设置的模型,我希望params如'?unread = true'来基于StudentShow模型上的消息未读。 我真正想要做什么,我可以在学生和StudentsShow路线已经做 - 这将需要改变的唯一事情是模板。今天我会给你一个解决方案,让你知道它是如何发展的。我很感激它干起了代码库。 – Jim

+0

我认为你需要'Ember.Service'来保持两条路径中最重要的属性同步。我会很干净的做法。 –