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