@@ -37,24 +37,25 @@ define([
37
37
*
38
38
* @param {Object } mixinList - object contains mixins list.
39
39
* @param {Object } itemContainer - object with component config and DOM element link.
40
+ * @return {Promise }
40
41
*/
41
42
function initMixins ( mixinList , itemContainer ) {
42
- var configStack = { } ,
43
- element = itemContainer . el ;
43
+ var configStack ,
44
+ element = itemContainer . el ,
45
+ result = $ . Deferred ( ) ;
44
46
45
47
_ . each ( mixinList , function ( mixinArray , componentName ) {
46
48
configStack = itemContainer . data [ componentName ] ;
47
49
require ( mixinArray , function ( ) {
48
50
for ( var i = 0 , len = arguments . length ; i < len ; i ++ ) {
49
- configStack = arguments [ i ] ( configStack , element ) ;
51
+ $ . extend ( true , configStack , arguments [ i ] ( configStack , element ) ) ;
50
52
}
51
53
54
+ result . resolve ( itemContainer ) ;
52
55
} ) ;
53
- itemContainer . data [ componentName ] = configStack ;
54
56
} ) ;
55
- delete itemContainer . data . mixins ;
56
57
57
- return itemContainer ;
58
+ return result ;
58
59
}
59
60
/**
60
61
* Parses elements 'data-mage-init' attribute as a valid JSON data.
@@ -90,9 +91,17 @@ define([
90
91
. concat ( virtuals )
91
92
. forEach ( function ( itemContainer ) {
92
93
var mixins = itemContainer . data . mixins ;
94
+ delete itemContainer . data . mixins ;
93
95
94
96
if ( mixins ) {
95
- $ . when ( itemContainer = initMixins ( mixins , itemContainer ) ) . then ( _ . each ( itemContainer . data , init . bind ( null , itemContainer . el ) ) ) ;
97
+ $ . when (
98
+ initMixins ( mixins , itemContainer )
99
+ ) . then ( function ( mergedItemContainer ) {
100
+ _ . each (
101
+ mergedItemContainer . data ,
102
+ init . bind ( null , mergedItemContainer . el )
103
+ )
104
+ } ) ;
96
105
} else {
97
106
_ . each ( itemContainer . data , init . bind ( null , itemContainer . el ) ) ;
98
107
}
0 commit comments