Javascript回调修改它所属的对象

时间:2011-08-01 23:34:27

标签: javascript jquery callback draggable droppable

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

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

事件是drop(来自jquery ui droppable),我试过但它不起作用,有一个“无法调用方法'someCallBack'未定义”错误。

目标是在每个回调中修改“gallery”列表中的原始对象,这样我就可以在完成拖动后将列表保存起来并保存。

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

我很感激任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

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

而不是

{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'});
}}

答案 1 :(得分:0)

从这个小代码片段中,我并没有真正关注代码的流程或者看到足够的信息将它放入jsFiddle,所以我只会评论我看到的错误。

我没有在代码中看到您实际将someCallback函数分配给对象的位置。也许你的意思是这个代码:

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

实际上将函数附加到对象,删除一些无操作语句,将“对象”更改为“obj”,这样就不会对“对象”类产生任何混淆并添加缺少的分号:

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

在行尾也遗漏了很多分号,并且不确定为什么你在没有使用它时将事件和ui传递给someCallback函数。