@@ -11,9 +11,19 @@ define(
1111 '../model/address-converter' ,
1212 '../action/select-shipping-address' ,
1313 './postcode-validator' ,
14- 'mage/translate'
14+ 'mage/translate' ,
15+ 'uiRegistry'
1516 ] ,
16- function ( $ , ko , shippingRatesValidationRules , addressConverter , selectShippingAddress , postcodeValidator , $t ) {
17+ function (
18+ $ ,
19+ ko ,
20+ shippingRatesValidationRules ,
21+ addressConverter ,
22+ selectShippingAddress ,
23+ postcodeValidator ,
24+ $t ,
25+ uiRegistry
26+ ) {
1727 'use strict' ;
1828
1929 var checkoutConfig = window . checkoutConfig ,
@@ -45,26 +55,52 @@ define(
4555 } ) ;
4656 } ,
4757
58+ /**
59+ * Perform postponed binding for fieldset elements
60+ *
61+ * @param {String } formPath
62+ */
63+ initFields : function ( formPath ) {
64+ var self = this ,
65+ elements = shippingRatesValidationRules . getObservableFields ( ) ;
66+
67+ $ . each ( elements , function ( index , field ) {
68+ uiRegistry . async ( formPath + '.' + field ) ( self . doElementBinding . bind ( self ) ) ;
69+ } ) ;
70+ } ,
71+
72+ /**
73+ * Bind shipping rates request to form element
74+ *
75+ * @param {Object } element
76+ * @param {Boolean } force
77+ * @param {Number } delay
78+ */
79+ doElementBinding : function ( element , force , delay ) {
80+ var observableFields = shippingRatesValidationRules . getObservableFields ( ) ;
81+
82+ if ( element && ( observableFields . indexOf ( element . index ) !== - 1 || force ) ) {
83+ if ( element . index !== 'postcode' ) {
84+ this . bindHandler ( element , delay ) ;
85+ }
86+ }
87+
88+ if ( element . index === 'postcode' ) {
89+ this . bindHandler ( element , delay ) ;
90+ postcodeElement = element ;
91+ }
92+ } ,
93+
4894 /**
4995 * @param {* } elements
5096 * @param {Boolean } force
5197 * @param {Number } delay
5298 */
5399 bindChangeHandlers : function ( elements , force , delay ) {
54- var self = this ,
55- observableFields = shippingRatesValidationRules . getObservableFields ( ) ;
100+ var self = this ;
56101
57102 $ . each ( elements , function ( index , elem ) {
58- if ( elem && ( observableFields . indexOf ( elem . index ) !== - 1 || force ) ) {
59- if ( elem . index !== 'postcode' ) {
60- self . bindHandler ( elem , delay ) ;
61- }
62- }
63-
64- if ( elem . index === 'postcode' ) {
65- self . bindHandler ( elem , delay ) ;
66- postcodeElement = elem ;
67- }
103+ self . doElementBinding ( elem , force , delay ) ;
68104 } ) ;
69105 } ,
70106
0 commit comments