我正在尝试执行一个在对象(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”列表中的原始对象,这样我就可以在完成拖动后将列表保存起来并保存。
有没有办法实现我之前描述过的行为?
我很感激任何帮助。
由于
答案 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函数。