【问题标题】:What is the emberjs way for the use case: one route (router v2) but two models should be displayed?用例的 emberjs 方式是什么:一条路由(路由器 v2)但应该显示两个模型?
【发布时间】:2013-02-12 22:58:34
【问题描述】:

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

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

例如:

我有模型 Person 和模型 Pet。

类似:

 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 处理这种情况的方法是什么?

最好的问候

安德烈亚斯

【问题讨论】:

    标签: ember.js routes ember-data


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多