Javascript回调来修改它所属的对象

Javascript回调来修改它所属的对象,javascript,jquery,callback,draggable,droppable,Javascript,Jquery,Callback,Draggable,Droppable,我试图执行一个回调,该回调是在一个对象(照片)中声明的,来自另一个具有“照片”列表的对象(图库)。我希望该回调函数修改它所属的确切对象。我有这样的想法: var photo= function(){ this.Id; this.Url; this.someCallBack = function(event, ui, object){ this.Id = object.Id; this.Url = object.Url; } } var gallery = function(){

我试图执行一个回调,该回调是在一个对象(照片)中声明的,来自另一个具有“照片”列表的对象(图库)。我希望该回调函数修改它所属的确切对象。我有这样的想法:

var photo= function(){
 this.Id;
 this.Url;
 this.someCallBack = function(event, ui, object){
  this.Id = object.Id;
  this.Url = object.Url;
 }
}

var gallery = function(){
 this.Name;
 this.PhotoList = new Array();
 this.Draw = function(){
  for(var i =0; i < this.PhotoList.length; i++){
   var self = this;
   $('#'+this.PhotoList[i].Id).droppable({drop:function(event, ui){
    self.PhotoList[i].someCallBack(event, ui, new{Id = 15, Url = 'someUrl.jpg'});
   }
   });
  }
 }
}
var photo=function(){
这个.Id;
这个.Url;
this.someCallBack=函数(事件、ui、对象){
this.Id=object.Id;
this.Url=object.Url;
}
}
var gallery=函数(){
这个名字;
this.PhotoList=新数组();
this.Draw=function(){
对于(var i=0;i
该事件是drop(来自jqueryui droppable),我尝试过,但它不起作用,出现了“无法调用未定义的方法'someCallBack'的”错误

目标是在每次回调中修改“gallery”中列表中的原始对象,这样我可以在完成拖动并保存列表后获取该列表

有没有办法实现我之前描述的行为

我非常感谢你的帮助


感谢这个小代码片段,我没有真正遵循代码流程,也没有看到足够的信息将其放入JSFIDLE,所以我只对看到的错误进行评论

我看不到在代码中有任何地方实际将someCallback函数分配给对象。也许您的意思是,对于此代码:

var photo= function(){
 this.Id;
 this.Url;
 this.someCallBack(event, ui, object){
    this.Id = object.Id
    this.Url = object.Url
 }
}
为此,它实际上将函数附加到对象,删除一些无操作语句,将“object”更改为“obj”,这样就不会对“object”类产生任何混淆,并添加缺少的分号:

var photo = function(){
    this.someCallBack = function(event, ui, obj){
        this.Id = obj.Id;
        this.Url = obj.Url;
    }
 }

此外,在行尾还缺少很多分号,并且不确定在不使用事件和ui时为什么要将它们传递给someCallback函数。

从这个小代码片段中,我没有真正了解代码的流程,也没有看到足够的信息将其放入JSFIDLE,所以我只对看到的错误进行注释

我看不到在代码中有任何地方实际将someCallback函数分配给对象。也许您的意思是,对于此代码:

var photo= function(){
 this.Id;
 this.Url;
 this.someCallBack(event, ui, object){
    this.Id = object.Id
    this.Url = object.Url
 }
}
为此,它实际上将函数附加到对象,删除一些无操作语句,将“object”更改为“obj”,这样就不会对“object”类产生任何混淆,并添加缺少的分号:

var photo = function(){
    this.someCallBack = function(event, ui, obj){
        this.Id = obj.Id;
        this.Url = obj.Url;
    }
 }

此外,在行尾缺少很多分号,并且不确定在不使用事件和ui时为什么要将它们传递给someCallback函数。

除了photo函数中的
someCallback
声明无效外,还可以尝试使用
$(“#somePhoto”).data('the-photo-object',photo)
存储照片对象,并使用
$('#somePhoto').data('the-photo-object')
drop
事件回调中的jQuery元素检索照片对象将为您省去一些麻烦

而不是

{drop:function(event, ui){
    self.PhotoList[i].someCallBack(event, ui, new{Id = 15, Url = 'someUrl.jpg'});
}}
这就不那么令人困惑了:

// creating a new photo object and assigning it to a jquery element
var aPhoto = new photo();
$('#draggable-photo').data('the-photo-object', aPhoto);

// retrieving photo objects from the dom that is being dragged.
{drop:function(event, ui){
   var droppable = $(this);
   var draggable = ui.draggable;
   // assuming draggable is photo, droppable is gallery
   var photo = draggable.data('the-photo-object');
   photo.someCallBack(event, ui, new{Id = 15, Url = 'someUrl.jpg'});
}}

除了photo函数中的
someCallback
声明无效外,您还可以尝试使用
$('somePhoto').data('the-photo-object',photo)
存储照片对象,并使用
$('somePhoto').data('the-photo-object'))
drop
事件回调中的jQuery元素中检索照片对象将为您省去一些麻烦

而不是

{drop:function(event, ui){
    self.PhotoList[i].someCallBack(event, ui, new{Id = 15, Url = 'someUrl.jpg'});
}}
这就不那么令人困惑了:

// creating a new photo object and assigning it to a jquery element
var aPhoto = new photo();
$('#draggable-photo').data('the-photo-object', aPhoto);

// retrieving photo objects from the dom that is being dragged.
{drop:function(event, ui){
   var droppable = $(this);
   var draggable = ui.draggable;
   // assuming draggable is photo, droppable is gallery
   var photo = draggable.data('the-photo-object');
   photo.someCallBack(event, ui, new{Id = 15, Url = 'someUrl.jpg'});
}}

是的,我使用jQuery,我应该更改标题或问题中的内容吗??感谢我使用jQuery,我应该更改标题或问题中的内容吗??谢谢汉克斯,我要纠正这些错误,完整的代码要长得多,我只是复制了一些片段,但不幸的是这不是问题:(谢谢,我要纠正这些错误,完整的代码要长得多,我只是复制了一些片段,但不幸的是这不是问题:(