如何在链接到帮助器中传递DS.PromiseObject作为模型?

时间:2014-09-27 20:36:39

标签: ember.js ember-data

所以我有以下型号:

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

1 个答案:

答案 0 :(得分:1)

构建url时,它使用serialize钩子在路径上找到realm_id。您可以通过使用id轻松解决此问题,可能还有其他问题,但我稍后将不得不使用它。

{{#link-to 'realms' defaultRealm.id}}
    Realm  
{{/link-to}}

async示例:http://emberjs.jsbin.com/OxIDiVU/1107/edit