Как сделать параметры адреса для выставления счетов видимым массивом? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть всплывающая форма «Добавить новый адрес», поэтому пользователь может отправить ее, и новый адрес будет добавлен в массив.Мне нужно обновлять мой тег выбора каждый раз, когда добавляется новый адрес.Я думаю, что мне нужно сделать 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 на самом деле не меняется.

...