我试图从回调中获得回报,但我总是得到未定义。
这是剪辑
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
谁知道为什么?答案 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
},