Javascript 在Ember中的控制器之间共享数据

Javascript 在Ember中的控制器之间共享数据,javascript,ember.js,Javascript,Ember.js,我是新来灰烬的,我正在为这件事发愁 我正在使用的应用程序有一组将动态更新的警报。我的警报模板/控制器/模块工作正常。警报控制器有一种显示未解除警报数量的方法。这在警报模板中运行良好 但是,当我从另一个控制器访问相同的方法时,它总是返回0 谢谢你的帮助 更新: 我发现,如果我实际加载警报视图,然后返回主视图,警报控制器将开始返回正确的值。因此,当菜单控制器访问该方法时,显然存在夹具数据未准备就绪的问题。我还没有弄清楚原因。试试这样的方法: App.HomeRoute = Ember.Route.e

我是新来灰烬的,我正在为这件事发愁

我正在使用的应用程序有一组将动态更新的警报。我的警报模板/控制器/模块工作正常。警报控制器有一种显示未解除警报数量的方法。这在警报模板中运行良好

但是,当我从另一个控制器访问相同的方法时,它总是返回0

谢谢你的帮助

更新:


我发现,如果我实际加载警报视图,然后返回主视图,警报控制器将开始返回正确的值。因此,当菜单控制器访问该方法时,显然存在夹具数据未准备就绪的问题。我还没有弄清楚原因。

试试这样的方法:

App.HomeRoute = Ember.Route.extend({
    renderTemplate: function(controller, model) {
        this._super(controller, model);
        this.render('menu', {
            into: 'home',
            outlet: 'alertsMenuItem',
            controller: 'alerts'
        });
    }    
});

<script type="text/x-handlebars" data-template-name="home">
    <img {{bind-attr src=appInfo.headerImage}} id="header_image" alt="Header Image" />
    {{render "alerts" model}}
    <ul id="home_nav">
        <li>Home</li>
        <li>About</li>
        <li>
            {{outlet "alertsMenuItem"}}
        </li>
    </ul>
</script>   

<script type="text/x-handlebars" data-template-name="menu"> 
    {{#link-to 'alerts'}}
        Alerts ({{remaining}})
    {{/link-to}}
</script>

这确实获得了使用警报控制器的菜单模板。不幸的是,我已经拥有的代码也是如此。我正在访问剩余的方法,它只是没有返回正确的数字。结果是一样的,菜单模板显示0个警报。啊,这是因为您的AlertRoute正在设置模型。如果您只是访问主页,Ember不知道如何加载模型,即使使用计算出的剩余属性也是如此。至少这是我的猜测。在AlertsRoute.model钩子中放入一些console.log,看看是否调用了它。。。我对此表示怀疑。我更新了我的答案,以说明如何在AlertsController中设置模型。如果没有调用AlertsRoute的model方法,则是正确的。但是,在添加您建议的init方法时,我发现虽然在调用其余方法之前调用init方法,但self.set'model',model;直到调用剩余的方法后才调用,导致它仍然返回0;您可能必须将剩余的计算属性更改为.property'model.@each.isCompleted'不幸的是,这似乎没有什么区别。在加载路由之前,我需要弄清楚如何加载数据。
App.AlertsController = Ember.ArrayController.extend({
    init: function() {
        var self = this;
        this.store.find('alert').then(function(model) {
            self.set('model', model);
        });
    },
    sortProperties: ['createdAt:desc'],
    sortedModel: Ember.computed.sort("model", "sortProperties"),
    remaining: function() {
            console.log(this.filterBy('isCompleted', false).get('length'));
            return this.filterBy('isCompleted', false).get('length');
    }.property('@each.isCompleted')
});