ember.js动态路线问题
我有相同的App.User和App.Contact模型,它们从基类继承: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.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'});
});
});