ember.js动态路线问题

ember.js动态路线问题,ember.js,ember-data,ember-router,Ember.js,Ember Data,Ember Router,我有相同的App.User和App.Contact模型,它们从基类继承: App.Person = DS.Model.extend({ firstName: DS.attr('string'), surname: DS.attr('string'), email: DS.attr('string'), fullName: function(){ return this.get('firstName') + " " + this.get('s

我有相同的App.User和App.Contact模型,它们从基类继承:

App.Person = DS.Model.extend({
    firstName: DS.attr('string'),
    surname: DS.attr('string'),   
    email: DS.attr('string'),
    fullName: function(){
        return this.get('firstName') + " " +  this.get('surname');
    }.property('firstName', 'surname'),
});

App.Contact = App.Person.extend({
});

App.User = App.Person.extend({
});
我想以某种方式将这些对象传递到一个新的路由,该路由允许我自动通过电子邮件发送它们。我有一个邮件对象,它将此人引用为多态关系:

App.Mail = DS.Model.extend({
    recipients: DS.hasMany('App.Person', {polymorphic: true}),
});
我的问题就在这把小提琴上


由于某些原因,App.MailPersonRoute路由中没有设置该模型,对此我感到困惑。

因为您的路由器有嵌套路由:

App.Router.map(function() {
    this.resource('mail', function(){
        this.route('person', {path: 'person/:person_id'}); 
    });
});
您正在创建一个
{{linkTo}
将嵌套路由名称作为
mail.person传递:

<script type="text/x-handlebars" data-template-name="index">
  {{#each model}}
    <p>Mail to {{#linkTo mail.person this}}{{fullName}}{{/linkTo}}
  {{/each}}
</script>
该变更还要求路线的定义与以下类似:

serialize: function(model){
    var _personType = 'contact';
    if(model instanceof App.User) {
        _personType = 'user'
    }
    return {
        person_type: _personType,
        person_id: model.get('id')
    };
}
App.Router.map(function() {
    this.resource('mail', function(){
        this.route('person', {path: ':person_type/:person_id'}); 
    });
});

如果您的用户和联系人都具有相同的id,那么这样实现它将防止链接的
href
相等。在当前状态下,如果您访问其中一个链接,浏览器将认为这两个链接都已访问。再说一遍,这不是要求或任何东西。

谢谢。多态性与rails不同。我想指定所有模型,框架决定正确的模型,而不是指定基类。
serialize: function(model){
    var _personType = 'contact';
    if(model instanceof App.User) {
        _personType = 'user'
    }
    return {
        person_type: _personType,
        person_id: model.get('id')
    };
}
App.Router.map(function() {
    this.resource('mail', function(){
        this.route('person', {path: ':person_type/:person_id'}); 
    });
});