首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制器父级在其子节点之间共享内容

控制器父级在其子节点之间共享内容
EN

Stack Overflow用户
提问于 2016-12-29 21:12:48
回答 1查看 32关注 0票数 0

我有一个基类,它有一些属性。我将这个类继承到另外两个控制器中。但是,每当我将内容设置为这个变量时,内容就会在两个控制器之间共享。我不会这样做的,否则我会用Mixins的。我想将一个子路径中的内容设置为某个内容,当我转到另一个路径时,内容仍然是空白的。

代码语言:javascript
复制
// 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 21:32:13

好的,我必须做的和他们推荐给Mixins的一样:我已经创建了一个init()方法,将变量设置为默认值。在我给出的例子中,它变成:

代码语言:javascript
复制
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链被进一步覆盖。这为覆盖或扩展对象行为提供了一种非常强大但具有潜在危险的机制。

有关此主题的更多内容,请参见这里

有两种方法可以避免共享行为。

  1. 使用计算属性
  2. init函数进行初始化,正如我所做的那样

在主题这里中有更多的参考,如@lock所说

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41387255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档