我有一个运行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。我应该显示用户登录但我什么都没有。它在控制台中显示用户对象,但在视图中不显示。
是解决方案吗?
答案 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>