无法在控制器上共享依赖项

时间:2015-05-25 12:18:07

标签: ember.js

我有一个运行Ember 1.12.0的应用程序。我有一个名为/app/templates/repositories.hbs的简单模板,其中包含以下内容:

{{controllers.user.login}}

我在控制器app/controllers/repositories.js中添加了这个:

import Ember from 'ember';

export default Ember.ArrayController.extend({
  needs: "user",
});

我有这条路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    var user = this.modelFor('user');
    console.log(user);
    return Ember.$.getJSON('https://api.github.com/users/'+user.login+'/repos');
  }
});

这台路由器:

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('index', {path: '/'} );
  this.resource('user', {path: '/users/:login'}, function() {
    this.resource('repositories');
  });
});

export default Router;

根据the documentation。我应该显示用户登录但我什么都没有。它在控制台中显示用户对象,但在视图中不显示。

是解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以在user路由中获取user模型(正如您在控制台中看到的那样,modelFor正常工作)。但是,您试图在login控制器上获取user对象 - 我认为它没有定义。您真正想要的是login属性user路由的模型(可能是用户,但您没有发布user路由代码。)< / p>

要在一个控制器中使用这两个型号,您不需要共享这些控制器。您所需要的只是user路线的模型。因此,您可以按如下方式保留model挂钩:

model: function(params) {
  return Ember.$.getJSON('https://api.github.com/users/'+user.login+'/repos');
}

并按如下方式编写setupController方法:

setupController: function(controller, model) {
  controller.set("model", model);
  controller.set("user", this.modelFor("user");
}

在您的模板中,您将拥有来自AJAX的repos和具有该属性的user属性。

{{user.login}}

另一方面,通过一些修复,您可以使用共享user控制器获得相同的效果,但它不是您需要的 - 您只需要该控制器的模型,而不是整个对象。 / p>