【发布时间】:2015-10-01 07:45:28
【问题描述】:
在我的应用程序中,我有一个通向主应用程序布局的通用标题。在该标题中,您可以选择一个站点。我需要该站点选择来更新在应用程序布局中呈现的另一个模板。经过几天的努力,我认为解决这个问题的正确方法是使用共享服务,让标头控制器观察站点选择并在共享服务中设置该值,然后让索引控制器使用 Ember .computed.alias 服务控制器中的值。以下是我的代码示例:
控制器/header.js
import Ember from 'ember';
export default Ember.Controller.extend({
sessionService: Ember.inject.service(),
currentSiteChanged: Ember.observer('session.current_site', function(){
var current_site = this.get('session.current_site');
console.log('currentSiteObserver', current_site);
this.get('sessionService').set('currentSite', current_site);
}),
});
控制器/index.js
import Ember from 'ember';
export default Ember.Controller.extend({
sessionService: Ember.inject.service(),
currentSite: Ember.computed.alias('sessionService.currentSite'),
dashboardData: function(){
var currentSite = this.get('currentSite');
console.log("in dashboardData", currentSite);
//other code that uses the currentSite
}.property('currentSite'),
});
services/session-service.js
import Ember from 'ember';
export default Ember.Service.extend({
currentSite: null,
setCurrentSite: function(){
var currentSite = this.get('session.current_site');
this.set('currentSite', currentSite );
}.on('init'),
});
我认为这应该允许某人在标题中选择一个站点,并在索引更新中使用 dashboardData 属性以使用该选择。当页面最初加载标题时,默认为第一个站点并且索引呈现它具有它必须从会话服务获得的正确站点值,但是如果您选择另一个站点,则索引不会得到更新。通过 console.logs 和调试,我可以看到 header 正在观察更改并在 session-service 上设置值。
此外,我已经尝试过解决其他方法(将标头服务注入索引并观察属性,将索引注入标头并直接设置值,发送和侦听事件等)但我愿意尝试任何事情或要更正,这不是解决问题的正确方法。
我正在使用 ember 1.13.8,目前无法选择迁移到 2。
【问题讨论】:
标签: ember.js