我有一个基类,它有一些属性。我将这个类继承到另外两个控制器中。但是,每当我将内容设置为这个变量时,内容就会在两个控制器之间共享。我不会这样做的,否则我会用Mixins的。我想将一个子路径中的内容设置为某个内容,当我转到另一个路径时,内容仍然是空白的。
// base controller
export default Ember.Controller.extend({
method: null,
actions: {
changeMethod() {
this.set('method', 'content is shared');
}
}
}
// children.js
import BaseClass from './base-class';
export default BaseClass.extend({ //code here });
// child1.hbs
{{method}} - it shows the same as child2.hbs
// child2.hbs
{{method}} - it shows the same as child1.hbs发布于 2016-12-29 21:32:13
好的,我必须做的和他们推荐给Mixins的一样:我已经创建了一个init()方法,将变量设置为默认值。在我给出的例子中,它变成:
export default Ember.Controller.extend({
method: null,
init() {
this._super():
this.set('method', null);
},
actions: {
changeMethod() {
this.set('method', 'content is shared');
}
}
}创建的对象共享相同的原型。据Mozilla说:
所有对象都可以通过prototype链接看到对对象原型对象的更改,除非受这些更改影响的属性和方法沿着prototype链被进一步覆盖。这为覆盖或扩展对象行为提供了一种非常强大但具有潜在危险的机制。
有关此主题的更多内容,请参见这里
有两种方法可以避免共享行为。
init函数进行初始化,正如我所做的那样在主题这里中有更多的参考,如@lock所说
https://stackoverflow.com/questions/41387255
复制相似问题