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

时间:2015-02-26 16:24:50

标签: javascript ember.js

我是Ember的新手,我把头发拉过来。

我正在处理的应用程序有一组"警报"这将动态更新。我有警报模板/控制器/模块都工作正常。警报控制器具有用于显示尚未被解除的警报的数量的方法。这在警报模板中工作正常。

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

Here's a pastebin with the controllers, templates and model

感谢您的帮助!

更新

我发现如果我实际加载警报视图,然后返回到主视图,则警报控制器会开始返回正确的值。显然,当菜单控制器访问该方法时,夹具数据没有准备就绪存在问题。我还没有弄明白为什么。

1 个答案:

答案 0 :(得分: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>

使用Ember.Route.render,您可以指定用于模板的controller

请注意,如果要从alerts以外的路由访问AlertsModel,则应在AlertsController中设置模型。这样的东西适用于Ember 1.10,但对于早期版本可能略有不同:

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')
});