问题:
我有点挣扎着我的第一个ember应用程序的组织。当前的问题是我的Items
模板中未定义my dashboard
ArrayController:
<script type="text/x-handlebars" data-template-name="dashboard">
{{#if controllers.items}}
<p class="alert alert-error">Dashboard can access item's info - Nice!</p>
{{else}}
<p class="alert alert-error">Dashboard cannot access items... :-/</p>
{{/if}}
</script>
可能原因: *
**编辑:在与@conrad谈话之后,我有点质疑:*
我在earlier post中遇到过类似的问题,而且他的建议原因是我:
“从未创建任何使用选项控制器的东西”。
这也可能就是这种情况。 This quick screencast显示我的ArrayController上的断点未在页面加载时被点击 - 但当我在Ember检查器工具中检查Items控件时, 被点击(例如, ,Ember第一次创建了ArrayController对象。
明显的非解决方案:
我的Dashboard
控制器说它需要Items
控制器。我想这还不足以实例化ArrayController?
App.ItemsController = Ember.ArrayController.extend({
len: function(){
return this.get('length');
}.property('length'),
totalCost: function() {
return this.reduce( function(prevCost, item){
return parseInt(item.get('values').findBy('type', 'cost').price, 10) + prevCost;
}, 0);
}.property('@each.values')
[more computed properties...]
});
App.DashboardController = Em.Controller.extend({
needs: ['items'],
itemsLength: Ember.computed.alias('controllers.items.len'),
itemsTotalCost: Ember.computed.alias('controllers.items.totalCost'),
[more computed properties...]
});
此外,Items
中的每个项目 都会在我的items
模板中呈现。我想这不会创建丢失的controllers.items
......
<script type="text/x-handlebars" data-template-name="items">
{{#each}}
[these render fine]
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="display">
<!-- DISPLAY TEMPLATE -->
{{!- DASHBOARD -}}
{{render dashboard}}
{{!- ITEMS -}}
{{render 'items' items}}
</script>
那么..什么?
我可以想象很多可能的途径,但还没有让它们中的任何一个工作:
{{render dashboard}}
?
答案 0 :(得分:0)
您可以通过在ItemController
的初始化函数中调用DashboardController
来确保App.DashboardController = Em.Controller.extend({
needs: ['items'],
init: function() {
this._super();
this.get('controllers.items.length');
}
});
在仪表板模板中实例化:
{{1}}
/编辑:
删除了无用的部分