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

时间:2014-12-16 18:31:57

标签: ember.js

我目前正在开发Ember应用程序并且它很顺利,但由于我对MVC应用程序不熟悉,因此很多概念对我来说并不是很自然。

我目前正在尝试为我的索引路线返回两个模型。我提到另一个SO问题(EmberJS: How to load multiple models on the same route?)用于正确的方法并且它运作良好。

我现在的问题是,只有在用户通过身份验证时才需要设置两个模型中的一个。我正在使用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 ...'
      })
    });
  }
});

出于某种原因,这不起作用。加载我的路线后,该模型只有“新入口”和#39;财产,而不是一个条目'属性,虽然承诺确实得到了实现(我把console.logs放在里面来证明它)。

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

1 个答案:

答案 0 :(得分:1)

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

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

  

...提供路线已解决的模型......

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

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