2013-02-12 57 views
0

我已经用路由器v2的emberjs用于一些用例,它的工作非常好。我通过点击{{linkto ..}}结构(使用相关的嵌套资源)来增加页面的复杂度。用例的emberjs方式是什么:一条路由(路由器v2)应该显示两个模型?

但有时可能需要一次显示两个(或更多)不同的模型。

例如:

我有模型的人和模型宠物。

喜欢的东西:

DS.RESTAdapter.configure("plurals",{"person" : "people"}) 

App.Store = DS.Store.extend({ 
revision: 11, 
    adapter: DS.RESTAdapter.create({namespace: 'restservice'}) 
}); 

var attr = DS.attr; 

App.Person = DS.Model.extend({ 
firstName: attr('string'), 
lastName: attr('string'), 
birthDay: attr('string'), 
    pets: DS.hasMany('App.Pet') 
}); 


App.Pet = DS.Model.extend({ 
    name: attr('string'), 
    species: attr('string'), 
    person: DS.belongsTo('App.Person') 
}); 

对于型号人与宠物的某种原因情况存在,但是这两种模式之间的关系尚未确定。

在一个通过{{linkto ..}}构造调用的页面中,我想实现一个 人物分配编辑器。 在这种情况下,我想显示两个列表:

  • 宠物

通常该页面的路线将仅对应于一个模型,但对人的名单列表 - 宠物分配编辑器,两个模型应该一次显示(没有额外的用户干预)是完全自然的。

什么是最好的实现方式。 我应该加载没有布线概念的模型吗?

确实存在的方式是这样的:

 (represent the person - pet assigment editor 'page') 
         | 
         | 

{{linkto ..}} ------->资源路径-----> '分裂重定向'

          - ----------------> resource-route person 

              - ----------------> resource-route pet 


    (like a url to a frame set which bear two (or more) 'parallel' requests) 

分裂重定向后,我有3条活动路线:对人

  • 资源路线 - 宠物分配新建分配FY编辑
  • 资源路线的人
  • 资源路由宠物

之后,正常的增量钻(深嵌套的路线:选择人,选择的宠物。)行动可能会发生。

我可以实现我的用例没有这样的概念,但我喜欢路由的概念,并有兴趣在更复杂的情况下使用它。

是否存在这样的概念? 什么是emberjs方式来处理这种情况?

问候

安德烈亚斯

回答

2

我不认为分裂重定向是正确的想法。你走路由器太远 - 这会让事情变得比他们需要的更复杂。我建议你制作个人宠物作业的路线,并在那里展示宠物和人物。这条路线的模型将是所有相关的宠物和人 - 仍然是2种模型。我不知道在model方法来指定2种型号的正确方法,因此,我建议加载它们在setupController

App.PetsToPersonRoute = Em.Route.extend({ 
    setupController: function (controller) { 
     controller.setProperties({ 
      pets: App.Pet.find(), 
      persons: App.Person.find() 
     }); 
    } 
});