Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js itemController控制器泄漏变量_Javascript_Ember.js_Handlebars.js - Fatal编程技术网

Javascript Ember.js itemController控制器泄漏变量

Javascript Ember.js itemController控制器泄漏变量,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我有一个itemController,它有两个字段:isExpanded和newComment。isExpanded运行良好,并绑定到每个itemController,但是itemController的所有实例都以某种方式共享了新的内容。而且这只是第一次分享。在我提交新评论后,该textarea不再与其他textarea共享相同的绑定,但其余的textarea仍然神秘地绑定到相同的ghostnewComment。为什么? [1] 先前的问题被删除并隔离到此jsbin。似乎当基于Discussi

我有一个itemController,它有两个字段:
isExpanded
newComment
isExpanded
运行良好,并绑定到每个itemController,但是itemController的所有实例都以某种方式共享了新的内容。而且这只是第一次分享。在我提交新评论后,该textarea不再与其他textarea共享相同的绑定,但其余的textarea仍然神秘地绑定到相同的ghost
newComment
。为什么?


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

似乎当基于
DiscussionController
原型创建新控制器时,其属性被浅层复制。由于您的
newcommon
是一个引用类型,因此最终会有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: ''
      });
    }
  }
});

另一种解决方案是使用
init
为每个实例设置默认值(但不要忘记调用
this.\u super()
)。谢谢大家!Christoff也在ember.Discussion上引用了这一问题,以获得完整的解释: