@@ -32,7 +32,29 @@ define([
32
32
}
33
33
} ) ;
34
34
}
35
+ /**
36
+ * Initializes mixins assigned to a specfied component.
37
+ *
38
+ * @param {Object } mixins - object contains mixins list.
39
+ * @param {Object } itemContainer - object with component config and DOM element link.
40
+ */
41
+ function initMixins ( mixins , itemContainer ) {
42
+ var configStack = { } ,
43
+ element = itemContainer . el ;
35
44
45
+ _ . each ( mixins , function ( mixin , componentName ) {
46
+ configStack = itemContainer . data [ componentName ] ;
47
+ _ . each ( mixin , function ( item ) {
48
+ require ( [ item ] , function ( fn ) {
49
+ configStack = fn ( configStack , element ) ;
50
+ } ) ;
51
+ } ) ;
52
+ itemContainer . data [ componentName ] = configStack ;
53
+ } ) ;
54
+ delete itemContainer . data . mixins ;
55
+
56
+ return itemContainer ;
57
+ }
36
58
/**
37
59
* Parses elements 'data-mage-init' attribute as a valid JSON data.
38
60
* Note: data-mage-init attribute will be removed.
@@ -65,11 +87,16 @@ define([
65
87
_ . toArray ( nodes )
66
88
. map ( getData )
67
89
. concat ( virtuals )
68
- . forEach ( function ( item ) {
69
- _ . each ( item . data , init . bind ( null , item . el ) ) ;
90
+ . forEach ( function ( itemContainer ) {
91
+ var mixins = itemContainer . data . mixins ;
92
+
93
+ if ( mixins ) {
94
+ $ . when ( itemContainer = initMixins ( mixins , itemContainer ) ) . then ( _ . each ( itemContainer . data , init . bind ( null , itemContainer . el ) ) ) ;
95
+ } else {
96
+ _ . each ( itemContainer . data , init . bind ( null , itemContainer . el ) ) ;
97
+ }
70
98
} ) ;
71
99
} ,
72
-
73
100
applyFor : init
74
101
} ;
75
102
} ) ;
0 commit comments