-2

Переформулирую, пожалуй. Вот есть код:

    token: '111',
run() {
    this.addressSuggestionsInit();
},
completeFields($this, suggestionsData) {
    let address = suggestionsData.data;
    let container = $this.closest('[data-suggestions-container]');
    let completeInputs = container.find('[data-equal-field-from]');

    completeInputs.each(function() {
        let input = $(this);
        let name = input.attr('data-equal-field-from');
        const value = address[name];
        const type = address[name + TYPE];
        let fullValue = '';

        if ('street' === name || 'city' === name) {
            fullValue = type && value ? `${type}. ${value}` : '';
        }

        if ('region' === name) {
            const regionTypeFull = address.region_type_full;
            fullValue = regionTypeFull && value ? `${value} ${regionTypeFull}` : '';
        }

        if (value) {
            input.val(fullValue ? fullValue : value);
        } else {
            input.val('');
        }
        input.change();
    });

    $this.change();
},

addressSuggestionsInit(container = false) {
    let self = this;
    let $address = container ? $(`${container} [data-suggestions-address]`) : $('[data-suggestions-address]');

    $address.each(function() {
        let $this = $(this);
        $this.suggestions({
            count: 10,
            type: 'ADDRESS',
            minChars: 3,
            token: self.token,
            onSelect(suggestionsData) {
                console.log('suggestionsData');
                console.log(suggestionsData);
                self.completeFields($this, suggestionsData);
            },
            addon: 'none',
        });
    });
},

};

доступ мне нужно получить к suggestionsData.

что я сделал:

  1. поместил коллбэк в месте инициализации этого скрипта, чтобы передать объект наружу.
suggest.run(function(suggestionsData) {
     console.log('вызов из коллбэка' + suggestionsData.data);
});
  1. сам скрипт изменил следующим образом:
run(suggestion) {
    this.addressSuggestionsInit();
    this.suggestion = suggestion; //добавил коллбэк
},
  1. поместил коллбэк в то место, где идет работа с suggestionData:
onSelect(suggestionsData) {
      console.log('suggestionsData');
      console.log(suggestionsData);
      this.suggestion(); // по моему замыслу это должен быть вызов коллбэка и передача его с параметром наверх, но тут исполнение скрипта прерывается ошибкой с сообщением о том, что this.suggestion is not a function
      self.completeFields($this, suggestionsData);
 },

буду признателен, если мне объяснят, что я делаю не так, и как надо получать доступ к свойствам объекта снаружи.

  • 1
    Мы тоже ничего не понимаем. –  Nov 04 '21 at 13:16
  • Я вообще ничего не понял, но единственный способ вытащить данные из локальной области в глобальную, это - переменная. Можно вернуть из функции что-то например или выше создать переменную, где-то потом ее заполнить и ниже смотреть, что туда прилетело. Доступ к объекту из другой функции нельзя получить, но сама функция может хранить в себе это объект. const newObj = getObj(); При этом, функция может хранить какое-то значение, например объект или массив из чего-то еще. – WalkMess Nov 04 '21 at 13:52

2 Answers2

0

Я не понимаю что у вас в примере написано, но по вашим комментариям я понял следующее:

//Есть некая функция, которая в процессе работы отдает объект (suggestionsData) в консоль.

let suggestionsData = { name : 'I am object'}

function printInConsole(suggestionsData, callback){ console.log(suggestionsData.name) callback(suggestionsData) }

//Как получить к этому объекту доступ из другой функции? Ваш колбек

function sayHi(suggestionsData){ //тут я получаю доступ к объекту 'suggestionsData' console.log('Hi there!' , suggestionsData.name) }

printInConsole(suggestionsData, sayHi)

Если я понял неправильно, пожалуйста, переформулируйте вопрос

Alexandr
  • 1,796
0

const suggest = {
  suggestion: null,

run(suggestion) { //this.addressSuggestionsInit(); this.suggestion = suggestion; },

onSelect(suggestionsData) { console.log('suggestionsData'); console.log(suggestionsData); this.suggestion(suggestionsData); //self.completeFields($this, suggestionsData); },
}

suggest.run(function(suggestionsData) { console.log('вызов из коллбэка' + suggestionsData.data); }); suggest.onSelect({data: ' someone'});

Sanya H
  • 1,379
  • спасибо большое за ответ. не могли бы вы дать больше контекста? я так понимаю, это правка для моего скрипта, но в таком виде я не могу проверить работоспособность - у меня даже не собирается фронт. Возможно, я что-то делаю неправильно? – Григорий Лялин Nov 05 '21 at 13:12
  • разместите свой код на codepen.io или аналогичном и дайте ссылку. Или сюда выложите код с полным объектом и его созданием и запуском методов – Sanya H Nov 05 '21 at 19:10