我有一个基类,它有一些属性。我将这个类继承到另外两个控制器中。但是,每当我将内容设置为此变量时,内容将在两个控制器之间共享。我不会发生这种情况,否则我会使用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
答案 0 :(得分:1)
好的,我必须做的就像他们为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的说法:
对象原型对象的更改通过原型链接被所有对象看到,除非在原型链中进一步覆盖受这些更改影响的属性和方法。这为覆盖或扩展对象行为提供了一种非常强大但有潜在危险的机制。
可以看到here
的更多内容有两种方法可以避免共享行为。
init
功能主题here中的更多参考为@lock表示