簡體   English   中英

在Ember中控制器之間共享數據

[英]Sharing data between controllers in Ember

我是Ember的新手,我正在把頭發拉出來。

我正在處理的應用程序有一組動態更新的“警報”。 我有警報模板/控制器/模塊都工作正常。 警報控制器具有用於顯示尚未被解除的警報的數量的方法。 這在警報模板中工作正常。

但是,當我從另一個控制器訪問相同的方法時,它總是返回0。

這是一個帶有控制器,模板和模型的pastebin

謝謝你的幫助!

更新

我發現如果我實際加載警報視圖,然后返回到主視圖,警報控制器將開始返回正確的值。 顯然,當菜單控制器訪問該方法時,夾具數據沒有准備就緒存在問題。 我還沒弄清楚原因。

嘗試這樣的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM