Вход

Просмотр полной версии : Как передать переменные в callback ?


asker
28.02.2019, 18:11
Как передать аргументы которые пришли в функцию в ее 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
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
эм а если передать null в качестве аргумента для this в функции bind я контекст (this) функции copyCallback не перезатру ?
если до этого ты забиндил туда какой-то объект как this, тот первый так и останется

function f() { alert(this.x); }
f.bind({x:1}).bind({x:2})(); // второй bind игнорируется


и второй вопрос для полноты картины если не сложно, зачем может понадобится передавать 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
тоже не работает:

$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));
};