如何将2个模型传递给相同路径的模型参数

时间:2015-02-18 00:18:50

标签: ember.js

我无法将具有多个模型的用户的参数传递给路线。起初我有这个代码:

App.IndexRoute = Ember.Route.extend({
    model: function(params) {
        return this.store.find('user', params.id);
    }
});

这很好,并且通过了所有用户参数。

但是现在我需要来自“游戏”模型的数据。下面的代码成功地将“游戏”数据传递给模板,但现在我没有用户参数,并且在尝试将代码放入传递时我不断收到语法错误。

App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.RSVP.hash({
      game: store.find('game'),
      user: store.find('user')
    });
  },
  setupController: function(controller, models) {
    var game = models.game;
    var user = models.user;

    controller.set('content', game);
    controller.set('user', user);
  }
});

我想知道如何让2个模型进入1条路线,并且也为用户提供参数。

我也不完全理解setupController以及我需要在索引控制器中添加的内容。

1 个答案:

答案 0 :(得分:0)

首先,如果你在没有指定要查找的对象的情况下执行 store.find(),它将返回该类型的所有对象。所以你将拥有一个数组。

如果您想找到具有特定ID的用户(可能来自params),您可以这样做:

this.store.find('user', params.user_id);

store 之前注意 this。

至于游戏,我需要了解您的用户游戏模型是如何设置的,以及它们之间的关系。但基本上,除非你使用嵌套路线,否则你必须有一种方法可以在你的模型中找到用户后,根据用户找到一个或所有游戏。

我会完全删除 setup_controller ,因为这里不需要它。您可以在模板中访问用户和/或游戏,如下所示:

model.user
model.game

或者您可以在控制器上添加两个计算属性:

user: function(){
    return this.get('model.user');
}.property('model.user'),

game: function() {
    return this.get('model.game');
}.property('model.game')

在您的模板中,您只需将其作为用户游戏进行访问。