1

我在 emberjs 中使用嵌套的 ArrayController。基本上我有一个父 ArrayController,其内容由子 ArrayController 组成。每个子 ArrayController 的内容是一个简单的 emberjs 对象列表。使用时间线工具和 Chrome 的分析工具监控我的应用程序的内存使用情况,删除子 ArrayController 时似乎存在内存泄漏。我正在使用最新的 emberjs 大师。

简化的代码和演示可以在这里找到http://jsfiddle.net/qVNtv/22/。单击“添加”会添加 20 个子 ArrayController,每个子 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();
    }
  }); 
4

0 回答 0