我在emberjs中使用嵌套的ArrayController。基本上我有一个父ArrayController,其内容由子ArrayControllers组成。每个子ArrayController的内容都是一个简单的emberjs对象列表。使用时间轴工具和Chrome的分析工具监控我的应用程序的内存使用情况,在删除子ArrayControllers时似乎存在内存泄漏。我正在使用最新的emberjs大师。
简化的代码和演示可以在http://jsfiddle.net/qVNtv/22/找到。单击“添加”会添加20个子ArrayController,每个子控件都有40个简单的emberjs对象作为子对象。单击“全部删除”将删除所有子ArrayController。随着“添加”和“全部删除”的每个循环,总体内存使用量增加。如果我不使用任何{{action}}
,则总内存使用量保持不变。
我做错了吗?可以以某种方式避免这种内存使用量的增加吗?
该演示使用一个简单的模板,该模板由两个嵌套的{{#each}}
<script type="text/x-handlebars">
<input type="button" value="Add" onClick="Demo.containerController.addController();"/>
<input type="button" value="Remove all" onClick="Demo.containerController.removeAll();"/>
{{#each Demo.containerController.content tagName="ul"}}
<li>{{#each content}}<a {{action "test"}}></a> {{prop}}{{/each}}</li>
{{/each}}
</script>
代码是
Demo = Ember.Application.create();
Demo.Model = Ember.Object.extend({
prop : ''
});
Demo.Controller = Ember.ArrayController.extend({
content: []
});
Demo.containerController = Ember.ArrayController.create({
content : [],
addController : function() {
for (var i = 0; i < 20; i++) {
var cnt = [];
for (var j = 0; j < 40; j++) {
cnt.pushObject(Demo.Model.create({prop: 'test' + j}));
}
this.pushObject(
Demo.Controller.create({
content: cnt
}));
}
},
removeAll : function() {
this.clear();
}
});