Javascript Ember.js itemController控制器泄漏变量
我有一个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
isExpanded
和newComment
。isExpanded
运行良好,并绑定到每个itemController,但是itemController的所有实例都以某种方式共享了新的内容。而且这只是第一次分享。在我提交新评论后,该textarea不再与其他textarea共享相同的绑定,但其余的textarea仍然神秘地绑定到相同的ghostnewComment
。为什么?
[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上引用了这一问题,以获得完整的解释: