嵌套控制器+动作时Emberjs内存泄漏?

时间:2012-07-25 07:51:43

标签: javascript ember.js

我在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();
    }
  }); 

0 个答案:

没有答案