0

我在某些用例中使用了带有路由器 v2 的 emberjs,它的效果非常好。对于通过单击 {{linkto ..}} 构造(具有相关的嵌套资源)来增加页面复杂性的用例,我没有任何问题。

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

例如:

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

就像是:

 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')
});

出于某种原因,模型 Person 和 Pet 的实例存在,但尚未定义这两个模型之间的关系。

在通过 {{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 条活动路线:

  • 人的资源路线 - 宠物分配编辑器
  • 资源路线人
  • 资源路线宠物

之后,可以进行正常的增量钻取(更深的嵌套路线:选择一个人,选择一个宠物..)动作。

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

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

此致

安德烈亚斯

4

1 回答 1

2

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

App.PetsToPersonRoute = Em.Route.extend({
    setupController: function (controller) {
        controller.setProperties({
            pets: App.Pet.find(),
            persons: App.Person.find()
        });
    }
});
于 2013-02-13T21:29:26.170 回答