我正在尝试遵循最佳实践Ember及其潜力,这个问题浮现在我的脑海中,即Mixins和Services之间有什么区别,以及您如何使用它们?

我有一些服务/mixins,并且工作得很好,但是我想确保自己做得对。

最佳答案

混合是当您希望不同的对象具有相同的行为/数据时。假设您希望多个 Controller 触发相同的 Action ,但是更改一个参数:

// app/mixins/change-name.js
export default Ember.Mixin.create({
  actions: {
    changeName(item) {
      item.set('name', this.get('name'));
    }
  }
});

// app/controllers/some-controller
import ChangeName from '<app-name>/mixins/change-name';

export default Ember.Controller.extend(ChangeName, {
  name: 'Some Controller'
});

请注意, Controller 将具有相同的 Action ,但不会共享,每个 Controller 都有自己的 Action 。您还可以从对象本身扩展mixin,因为它们已添加到_super()链中。

要牢记的一个陷阱是,原始的按引用数据类型(如数组)仍按引用传递。因此,如果您具有带有数组属性的Mixin,请确保每次使用Mixin时都在数组上使用Ember.computed创建新实例。否则,简单地使用通用[]将导致所有Mixin使用指向同一数组。不同的引用值,都指向同一事物。

服务可以看作是一种可变的共享数据。如果您需要从应用程序的不同部分访问一组数据或行为,那么它是服务的理想选择。

例如,一个这样的例子是购物篮。无论您在应用程序中的什么位置,都需要引用相同的购物篮来操纵其数据。

关于ember.js - Emberjs上的Mixins和Services有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35269346/

10-11 15:28