javascript chainning从回调中返回此内容

时间:2013-01-10 13:12:29

标签: javascript callback return chaining

我试图从回调中获得回报,但我总是得到未定义。

这是剪辑

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

var l现在是未定义的,如果我使用带回调的fadeIn ... 如果我不使用fadeIn与回调它返回obj

谁知道为什么?

2 个答案:

答案 0 :(得分:2)

@Felix Kling说的是正确的,你没有返回任何东西。如果您想返回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的引用,则需要传递自己的回调:

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的引用,而不是一个可以排队命令的对象,按顺序执行每个命令。

答案 1 :(得分:1)

您需要在create()函数中返回该对象,它当前没有返回任何内容:

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
},