Ember.Mixin Class packages/ember-metal/lib/mixin.js:405


PUBLIC

The Ember.Mixin class allows you to create mixins, whose properties can be added to other classes. For instance,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const EditableMixin = Ember.Mixin.create({
  edit() {
    console.log('starting to edit');
    this.set('isEditing', true);
  },
  isEditing: false
});

// Mix mixins into classes by passing them as the first arguments to
// `.extend.`
const Comment = Ember.Object.extend(EditableMixin, {
  post: null
});

let comment = Comment.create(post: somePost);
comment.edit(); // outputs 'starting to edit'

Note that Mixins are created with Ember.Mixin.create, not Ember.Mixin.extend.

Note that mixins extend a constructor's prototype so arrays and object literals defined as properties will be shared amongst objects that implement the mixin. If you want to define a property in a mixin that is not shared, you can define it either as a computed property or have it be created on initialization of the object.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// filters array will be shared amongst any object implementing mixin
const FilterableMixin = Ember.Mixin.create({
  filters: Ember.A()
});

// filters will be a separate array for every object implementing the mixin
const FilterableMixin = Ember.Mixin.create({
  filters: Ember.computed(function() {
    return Ember.A();
  })
});

// filters will be created as a separate array during the object's initialization
const Filterable = Ember.Mixin.create({
  init() {
    this._super(...arguments);
    this.set("filters", Ember.A());
  }
});
Show:

Methods

Show:

apply

(obj) private

Parameters:

obj

Returns:

applied object

create

(arguments) public static

Parameters:

arguments

detect

(obj) Boolean private

Parameters:

obj

Returns:

Boolean

reopen

(arguments) private

Parameters:

arguments