我是Ember.js的新手,这是我的第一个应用程序,它有一个通知区域,始终可见。由于此通知区域包含在应用程序模板中,并且没有特定的路由,因此我使用{{render}} Helper添加了数字,并从ApplicationRoute设置了模型:
<script type="text/x-handlebars">
...
{{#link-to "notifications"}}
{{ render "notification-totals" }}
{{/link-to}}
<div class="dropdown">
{{outlet notifications}}
</div>
...
</script>
<script type="text/x-handlebars" data-template-name="notification-totals">
{{this.firstObject.total}}
</script>
ApplicationRoute将模型设置为控制器:
App.ApplicationRoute = Ember.Route.extend({
setupController: function() {
this.controllerFor('notification-totals').set('model',this.store.find('notification.total'));
}
});
模特:
App.NotificationTotal = DS.Model.extend({
total: DS.attr('number')
});
如何在Controller中访问模型?我没有尝试任何工作,例如:
App.NotificationTotalsController = Ember.ObjectController.extend({
total: function() {
var model = this.get('model');
.....
}.property()
});
答案 0 :(得分:2)
您的代码应该可以正常运行。您应该获取模型对象的数组,因为这是路径设置为模型的内容。
例如:
<script type="text/x-handlebars">
<div><h3>Notifications:</h3>
{{ render "notification-totals" }}</div>
</script>
<script type="text/x-handlebars" data-template-name="notification-totals">
{{total}}
</script>
App = Ember.Application.create();
App.Router.map(function() {
// put your routes here
});
App.ApplicationRoute = Ember.Route.extend({
setupController: function() {
var data = [
{
total: 7
}, {
total: 8
}, {
total: 12
}
];
this.controllerFor('notification-totals').set('model', data);
}
});
App.NotificationTotalsController = Ember.ObjectController.extend({
total: function() {
var model = this.get('model');
return model
.mapBy("total")
.reduce(function (prev, cur) {
return prev + cur;
}, 0);
console.log(model);
}.property("model.@each.total")
});
此控制器将访问所有模型对象并生成总和({{this.firstObject.total}}
将仅从第一个对象获得总计)。工作演示here。
如果您仍然没有得到任何结果,请检查您的数据源是否有任何结果(此演示使用硬编码值而不是ember数据)。