所以我有以下型号:
var User = DS.Model.extend({
name: DS.attr('string'),
defaultRealm: DS.belongsTo('realm', { async: true })
});
var Realm = DS.Model.extend({
name: DS.attr('string')
});
我的路由器和路线如下:
App.Router.map(function() {
this.route('index', { path: '/:user_id' });
this.route('realm', { path: '/realms/:realm_id' });
});
App.UserRoute = Em.Route.extend(
model: function (params) {
return this.store.find('user', params.user_id);
},
setupController: function (controller, model) {
controller.set('model', model);
}
);
在我的索引模板中,我有以下内容:
{{#link-to 'realm' model.defaultRealm}}
Realm
{{/link-to}}
现在一切都按预期工作,但link-to
会生成/realms/<App.RealmModel:ember728:541ddd0f29909d0000b6d407>
而不是/realms/541ddd0f29909d0000b6d407
的网址。看起来不是序列化模型的id
而是序列化整个DS.Model
对象(defaultRealm
实际上是PromiseObject
,因为关系是异步的)。这是怎么回事?
目前的解决方法:
使用控制器上的观察者并在模板中使用realmId
。这真的有必要吗?
App.IndexController = Em.ObjectController.extend({
realmId: null,
modelObserver: Em.observer('model', function () {
var self = this;
self.get('model.defaultRealm').then(function (realm) {
self.set('realmId', realm.get('id'));
});
});
});
版本:
ember#1.7.0
ember-data#1.0.0-beta.10
handlebars#1.3.0
答案 0 :(得分:1)
构建url时,它使用serialize钩子在路径上找到realm_id
。您可以通过使用id轻松解决此问题,可能还有其他问题,但我稍后将不得不使用它。
{{#link-to 'realms' defaultRealm.id}}
Realm
{{/link-to}}