【问题标题】:Can't we use plain Ember Objects in place of Ember Mixins?我们不能使用普通的 Ember 对象来代替 Ember Mixin 吗?
【发布时间】:2020-07-14 15:25:05
【问题描述】:

基本上我无法理解 Ember Object 和 Ember Mixin 之间的区别。 如果 Ember.Mixin.create() 本身是从 Ember.Object 扩展而来的,那我们为什么不混合使用 Ember.Object.create() 而不是 Ember.Mixin.create() 创建的对象呢?

为什么我们不用像这样的 Ember 对象

let TestObject = Ember.Object.create({
  init() {
    this._super(...arguments);
    this.set('list', Ember.A([]));
  }
}); 

let TestComponent = Ember.Component.extend(TestObject, {});

而不是像下面这样使用 Ember 混合

let TestMixin = Ember.Mixin.create({
      init() {
        this._super(...arguments);
        this.set('list', Ember.A([]));
      }
    }); 

let TestComponent = Ember.Component.extend(TestMixin, {});

【问题讨论】:

    标签: javascript mvvm ember.js


    【解决方案1】:

    所以我不想深入讨论 mixins 的历史方面,除非你不应该真正使用它们,特别是你的示例会导致许多错误,因为 mixins 之间共享状态的方式。

    在你的 mixin 示例中,当改变列表时,实际上会在不同的组件实例之间共享状态。

    说真的,最好的办法是假装 mixin 从一开始就不存在。

    编辑:关于 mixin 折旧的讨论https://github.com/emberjs/rfcs/issues/534

    【讨论】:

    • 我已经编辑了示例,以便不会共享状态。现在我们真的需要使用 mixins 还是只是简单的旧 ember 对象。是的,两者都可以解决目的,但如何决定使用哪一个?
    • 只是不要使用 mixins 并从基类扩展。当前的 Mixin 类将被贬低,直到语言本身支持它。
    猜你喜欢
    • 2015-03-25
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多