在路线上设置多个模型的正确方法;取决于用户身份验证



我目前正在开发一个 Ember 应用程序,它进展顺利,但由于我通常是 MVC 应用程序的新手,所以有很多概念对我来说并不自然。

我目前正在尝试为我的索引路由返回两个模型。我参考了另一个SO问题(EmberJS:如何在同一路线上加载多个模型?)以获得正确的方法,它效果很好。

我的问题是,现在我只需要在用户经过身份验证时才设置两个模型中的一个。我正在使用 ember-simple-auth,目前这就是我得到的:

// app/routes/index.js
import Ember from 'ember';
export default Ember.Route.extend({
  model: function() {
    if (this.get('session.isAuthenticated')) {
      var _this = this;
      this.get('store').find('user', this.get('session.uid')).then(function(user) {
        _this.set('model.entries', user.get('entries'));
      });
    }
    return Ember.RSVP.hash({
      newEntry: this.get('store').createRecord('entry', {
        body: 'Write here ...'
      })
    });
  }
});

出于某种原因,这不起作用。加载路由后,模型只有"newEntry"属性,而不是"entryries"属性,尽管承诺确实得到了实现(我把console.logs放在里面来证明这一点)。

可能会发生什么?这是实现这一目标的最佳方法吗?

您始终希望为每个用户加载一组数据。在model钩中执行此操作,这实际上是路由的数据。

只有当满足条件(身份验证)时,才要添加另一条信息。在afterModel钩中执行此操作。

。提供了路由的解析模型...

http://emberjs.com/api/classes/Ember.Route.html#method_afterModel

因此,现在您可以在模型中追加或删除数据。或者根据您收到的数据采取任何相关措施。

最新更新