Ember.js itemController控制器泄漏变量

时间:2014-05-15 04:23:31

标签: javascript ember.js handlebars.js

我有一个itemController,它有两个字段:isExpandednewCommentisExpanded工作得很好并绑定到每个itemController,但newComment以某种方式由itemController的所有实例共享。它只会第一次分享。在我提交新评论后,该textarea不再与其他textareas共享相同的绑定,但其余的textareas仍然神秘地绑定到同一个鬼newComment。为什么呢?

http://emberjs.jsbin.com/gojuhega/1/edit

[1]之前的问题被移除并隔离到此jsbin。

1 个答案:

答案 0 :(得分:0)

似乎在基于DiscussionController原型创建新控制器时,其属性被浅层复制。由于您的newComment是引用类型,因此最终会有3个控制器共享同一个实例。只有当您单击“创建”时,各个控制器才会获得自己的实例。

一个可能的解决方案:

App.DiscussionController = Ember.Controller.extend({
  isExpanded: false,

  newComment: null,
  actions: {
    toggleExpand: function(){
      this.toggleProperty('isExpanded');
      if (!this.get("newComment")) {
        this.set("newComment", {body:""});
      }
    },
    createComment: function() {
      this.set('newComment', {
        body: ''
      });
    }
  }
});