2013-01-10 1 views
0

Я попытался вернуть это из обратного вызова, но я всегда получаю неопределенный.javascript chainning возвращает это из обратного вызова

здесь является отрезал

create: function(currentView, data){ 
    var itsMe = this; 
    this.thumbsWrapper = this.templates.wrapper().hide(); 
    currentView.append(this.thumbsWrapper); 
    this.thumbsWrapper.fadeIn("fast", function(){ 
     return itsMe;             
    }); 
}, 

var l = list().create(currentView); //need teh return that i can use chaining 

вара л теперь не определены, если я использую FadeIn с обратным вызовом ... если я не использую FadeIn с обратным вызовом он возвращает OBJ

кто-нибудь, почему?

create: function(currentView, data){ 
    var itsMe = this; 
    this.thumbsWrapper = this.templates.wrapper().hide(); 
    currentView.append(this.thumbsWrapper); 
    this.thumbsWrapper.fadeIn("fast", function(){ 
     return itsMe; //<--- this isn't going anywhere because you don't capture it            
    }); 
    return itsMe; //<------ return the object 
}, 
+0

Поскольку обратный вызов возвращает значение, где оно было вызвано, оно находится где-то внутри '.fadeIn'. Он не влияет на функцию 'create'. –

ответ

2

Что @Felix Клинг сказать правильно, вы ничего не возвращающимся:

1

Вы должны вернуть объект в функции create(), в настоящее время она ничего не возвращается. Если вы хотите вернуть itsMe вам нужно будет сделать:

create: function(currentView, data){ 
    var itsMe = this; 
    this.thumbsWrapper = this.templates.wrapper().hide(); 
    currentView.append(this.thumbsWrapper); 
    this.thumbsWrapper.fadeIn("fast"); 
    return itsMe;  
} 

Что должно быть достаточно, если вы хотите цепочки.

Если вы хотите, чтобы получить ссылку на itsMe, когда Fadeout закончен, вам нужно будет передать свой собственный обратный вызов:

create: function(currentView, data, callback){ 
    var itsMe = this; 
    this.thumbsWrapper = this.templates.wrapper().hide(); 
    currentView.append(this.thumbsWrapper); 
    this.thumbsWrapper.fadeIn("fast", function(){ 
     callback(itsMe); 
    }); 
} 


list().create(function (that) { 
    console.log("fade out complete"); 
    console.log("itsMe is", that); 
}); 

И если вы хотите иметь шаблон СЦЕПЛЕНИЯ, который будет выполнять следующее функция в цепочке, когда завершение fadeout завершено, вам нужно передать ссылку на this, но объект, который может командовать очередью, выполнять каждую команду последовательно.

+0

Также обратите внимание, что из-за асинхронного характера функций анимации эта функция вернет * как можно скорее *, т. Е. Как только анимация будет добавлена ​​в очередь анимации. –

+0

@MattiasBuelens это правда, но все в порядке, так как он ничего не делает или не модифицирует 'itsMe' ​​в полном вызове fadeIn. – MrCode

+0

Согласен, я только отметил, что, поскольку это было не совсем ясно, когда * OP ожидал возвращения функции 'create'. –