我是Ember的新手,我把头发拉过来。
我正在处理的应用程序有一组"警报"这将动态更新。我有警报模板/控制器/模块都工作正常。警报控制器具有用于显示尚未被解除的警报的数量的方法。这在警报模板中工作正常。
但是,当我从另一个控制器访问相同的方法时,它总是返回0.
Here's a pastebin with the controllers, templates and model
感谢您的帮助!
更新:
我发现如果我实际加载警报视图,然后返回到主视图,则警报控制器会开始返回正确的值。显然,当菜单控制器访问该方法时,夹具数据没有准备就绪存在问题。我还没有弄明白为什么。
答案 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')
});