Javascript Ember.js:两个控制器之间的依赖关系失败
我正在尝试访问在同级控制器上使用Javascript Ember.js:两个控制器之间的依赖关系失败,javascript,ember.js,Javascript,Ember.js,我正在尝试访问在同级控制器上使用需求的控制器中的两个模型之一。我的路由器如下所示: App.Router.map(function() { this.route('login'); this.route('mlb.lineups', {path: 'tools/mlb/lineups'}) this.resource('mlb.lineups.site', { path: 'tools/mlb/lineups/site/:site_id' }); }); App.Mlb
需求
的控制器中的两个模型之一。我的路由器如下所示:
App.Router.map(function() {
this.route('login');
this.route('mlb.lineups', {path: 'tools/mlb/lineups'})
this.resource('mlb.lineups.site', { path: 'tools/mlb/lineups/site/:site_id' });
});
App.MlbLineupsRoute = Ember.Route.extend({
model: function() {
var self = this;
return Ember.RSVP.hash({
sites: self.store.find('site')
})
},
setupController: function(controller, models) {
controller.set('model', models.get('sites'));
},
afterModel: function(models) {
var site = models.sites.get('firstObject');
this.transitionTo('mlb.lineups.site', site);
}
});
App.MlbLineupsSiteController = Ember.ArrayController.extend({
needs: "mlb.lineups",
sites: Ember.computed.alias("controllers.models.sites")
});
mlb.lineups
路线定义如下所示:
App.Router.map(function() {
this.route('login');
this.route('mlb.lineups', {path: 'tools/mlb/lineups'})
this.resource('mlb.lineups.site', { path: 'tools/mlb/lineups/site/:site_id' });
});
App.MlbLineupsRoute = Ember.Route.extend({
model: function() {
var self = this;
return Ember.RSVP.hash({
sites: self.store.find('site')
})
},
setupController: function(controller, models) {
controller.set('model', models.get('sites'));
},
afterModel: function(models) {
var site = models.sites.get('firstObject');
this.transitionTo('mlb.lineups.site', site);
}
});
App.MlbLineupsSiteController = Ember.ArrayController.extend({
needs: "mlb.lineups",
sites: Ember.computed.alias("controllers.models.sites")
});
我在这里使用Ember.RSVP.hash({})的原因是我计划在检索站点
模型之后添加另一个要检索的模型
现在,在我的mlblineupsitecontroller
中,我正试图通过以下方式访问站点
模型:
App.Router.map(function() {
this.route('login');
this.route('mlb.lineups', {path: 'tools/mlb/lineups'})
this.resource('mlb.lineups.site', { path: 'tools/mlb/lineups/site/:site_id' });
});
App.MlbLineupsRoute = Ember.Route.extend({
model: function() {
var self = this;
return Ember.RSVP.hash({
sites: self.store.find('site')
})
},
setupController: function(controller, models) {
controller.set('model', models.get('sites'));
},
afterModel: function(models) {
var site = models.sites.get('firstObject');
this.transitionTo('mlb.lineups.site', site);
}
});
App.MlbLineupsSiteController = Ember.ArrayController.extend({
needs: "mlb.lineups",
sites: Ember.computed.alias("controllers.models.sites")
});
这就是我在Ember控制台中遇到的错误:需求不能指定名称中带有句点的依赖项(mlb.lineups)
在myMLBLineupSiteController
中,从MlbLineups
控制器中获取站点
模型的最佳方法是什么?应该是:
需要:“mlblineupsite”
基本上,就是要包含的控制器的名称,减去controller这个词
您发布的所有其他内容都应该有效。注意:
@尼古拉斯·约翰16的答案不再有效。它总是给出一个找不到控制器的错误。通常,如果必须使控制器相互依赖,则也不应使用“需要”属性,而应始终使用Ember.inject.controller。我还建议使用服务,而不是控制器之间的依赖关系。与控制器直接访问其他控制器的属性相比,维护包含控制器之间通过服务进行通信的代码更容易。您可能并不总是知道这样的访问,使用服务会给您带来另一层安全性 解决方案:
在Ember.js 1.10.0-beta.4中测试。使用控制器中的以下代码引用
需求中的嵌套控制器
:
needs: ['classic/about']
之后,您可以使用以下方式访问它:
const aboutController = this.get('controllers.classic/about');
const aboutProperty = aboutController.get('customProperty');
一切正常。基本上,您需要用斜杠替换圆点当您使用
“mlb.lineups”
作为资源时,您面临哪些问题?这并不意味着一个依赖于另一个,但也不能保证被启动(也就是说,如果用户直接导航到工具/mlb/lineups/site/1
,'mlb.lineups.site'
应该是'mlb.lineups'
的孩子。您介意回顾一下已接受的答案吗?