У меня есть всплывающая форма «Добавить новый адрес», поэтому пользователь может отправить ее, и новый адрес будет добавлен в массив.Мне нужно обновлять мой тег выбора каждый раз, когда добавляется новый адрес.Я думаю, что мне нужно сделать addressOptions наблюдаемым массивом, и мне удалось это сделать, но он по-прежнему не обновляет мой DOM, однако журнал консоли показывает, что новый адрес был добавлен в массив.
Я пыталсяизменить addressOptions: initialAddressOptions на addressOptions: ko.observableArray (initialAddressOptions) или добавить его в функцию initObservable
, вот мое наблюдаемое
return Component.extend({
defaults: {
template: 'Magento_Checkout/billing-address'
},
addressOptions: ko.observableArray(initialAddressOptions),
...
});
начальное значение моей наблюдаемой
var initialAddressOptions = addressList().filter(function (address) {
return address.getType() == 'customer-address';
});
вот мой шаблон платежных адресов
<div class="field field-select-billing">
<label class="label"><span data-bind="i18n: 'My billing and shipping address are the same'"></span></label>
<div class="control" data-bind="if: (addressOptions().length > 1)">
<select class="select" name="billing_address_id" data-bind="
options: addressOptions(),
optionsText: addressOptionsText,
value: selectedAddress,
event: {change: onAddressChange(selectedAddress())};
"></select>
</div>
<div class="add-billing-address" data-bind="click: openNewAddressPopupForm">
<span data-bind="i18n: '+ Add Another Billing Address'"></span>
</div>
</div>
и моя функция отправки формы
saveNewAddress: function() {
var addressData,
newBillingAddress;
this.source.set('params.invalid', false);
this.source.trigger(this.dataScopePrefix + '.data.validate');
if (!this.source.get('params.invalid')) {
addressData = this.source.get(this.dataScopePrefix);
newBillingAddress = createBillingAddress(addressData);
addressData['save_in_address_book'] = 1;
selectBillingAddress(newBillingAddress);
console.log(addressOptions);
addressOptions.push(newBillingAddress);
console.log(addressOptions);
checkoutData.setSelectedBillingAddress(newBillingAddress.getKey());
checkoutData.setNewCustomerBillingAddress($.extend(true, {}, addressData));
$('.billing-address-form').modal('closeModal');
}
},
Я ожидаю, что новый адрес выставления счетов появится в DOM сразу после его добавления в массив,но мой DOM на самом деле не меняется.