我试图遵循最佳实践Ember和他们的潜力,这个问题出现在我的脑海中,Mixins和Services之间有什么区别,以及您是如何使用它们的?
我有一些服务/混合器,工作相当好,但我想确定我做得对。
发布于 2016-02-08 15:10:33
当您希望不同的对象具有相同的行为/数据时,mixin。假设您希望多个控制器触发相同的操作,但是要更改一个参数:
// 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'
});注意,控制器将具有相同的操作,但它不是共享的,每个控制器都有自己的操作。还可以从对象本身扩展mixins,因为它们被添加到_super()链中。
要记住的一点是,像数组这样的原始引用数据类型仍然是通过引用传递的。因此,如果您有一个带有数组属性的Mixin,请确保每次使用Mixin时都在数组上使用Ember.computed创建新实例。否则,仅仅使用一个通用的[]就会导致所有Mixin使用指向同一个数组。不同的引用值,都指向相同的事物。
服务可以看作是一种可变的共享数据。如果您有一组需要从应用程序的不同部分访问的数据或行为,那么它是一个很好的服务候选对象。
例如,购物篮就是一个这样的例子。无论您在应用程序中位于何处,您都需要引用同一个购物篮才能操作其数据。
https://stackoverflow.com/questions/35269346
复制相似问题