Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать переменные в callback ? (https://javascript.ru/forum/misc/76930-kak-peredat-peremennye-v-callback.html)

asker 28.02.2019 18:11

Как передать переменные в callback ?
 
Как передать аргументы которые пришли в функцию в ее callback...а именно в copyCallback ?

это рабочий код

$scope.onCopy = function (ev, id) {
  _backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, function () {
       console.log(id);
   });
};

но анонимную функцию я хочу заменить на вызов callback, а там уже нет доступа к id

так не работает:

$scope.onCopy = function (ev, id) {
      _backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, copyCallback);
};

var copyCallback = function () {
      console.log(id);
}

пытался как то пробросить id через bind и proxy, но моих знаний в js не хватает чтобы это корректно реализовать:

тоже не работает:

$scope.onCopy = function (ev, id) {
      _backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, copyCallback.bind(id));
    };

или так

$scope.onCopy = function (ev, id) {
      _backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, $.proxy(copyCallback,  id);
    };


var copyCallback = function () {

      console.log(id);
}

как правильно в колбек передать id ?

Alexandroppolus 28.02.2019 18:39

Цитата:

Сообщение от asker
copyCallback.bind(id)

чуть-чуть не хватило )
copyCallback.bind(null, id)

...

var copyCallback = function (id) {
      console.log(id);
}

asker 01.03.2019 16:23

все равно что то не хватает....
 
эм а если передать null в качестве аргумента для this в функции bind я контекст (this) функции copyCallback не перезатру ?

и второй вопрос для полноты картины если не сложно, зачем может понадобится передавать this ? может лучше передать this и как то через него достучаться до id, а id из передоваемых аргументов убрать ? тк мне надо передать еще несколько аргументов и я думаю как это сделать более универсально....

Alexandroppolus 01.03.2019 20:12

Цитата:

Сообщение от asker
эм а если передать null в качестве аргумента для this в функции bind я контекст (this) функции copyCallback не перезатру ?

если до этого ты забиндил туда какой-то объект как this, тот первый так и останется
function f() { alert(this.x); }
f.bind({x:1}).bind({x:2})(); // второй bind игнорируется


Цитата:

Сообщение от asker
и второй вопрос для полноты картины если не сложно, зачем может понадобится передавать this ? может лучше передать this и как то через него достучаться до id, а id из передоваемых аргументов убрать ? тк мне надо передать еще несколько аргументов и я думаю как это сделать более универсально....

да, можно в this поставить объект, куда всё сложить, и при необходимости потом что-то дописать туда ещё
copyCallback.bind({id: id})

...

var copyCallback = function () {
      console.log(this.id);
}


но, повторюсь, это при условии, что copyCallback - не результат bind'а с каким-то другим this

Russo 03.03.2019 10:33

Цитата:

Сообщение от asker (Сообщение 504209)
тоже не работает:

$scope.onCopy = function (ev, id) {
_backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, copyCallback.bind(id));
};
[/JS]

А если вот, так.
$scope.onCopy = function (ev, id) {
var self = this;
_backend.getCard($scope, backendUri + '/' + id, 'formData', {id: id}, copyCallback.bind(self, id));
};


Часовой пояс GMT +3, время: 04:34.