Javascript Callback для изменения объекта, к которому он принадлежит - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь выполнить обратный вызов, который объявлен в объекте (Фото), из другого объекта, у которого есть список «Фото» (Галерея). Я хочу, чтобы эта функция обратного вызова изменяла точный объект, к которому он принадлежит.У меня есть что-то вроде этого:

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

Событие сбрасывается (из jquery ui droppable), я пытался, но это не работает, есть ошибка «не могу вызвать метод someCallBack неопределенной».

Цель состоит в том, чтобы изменять исходные объекты из списка в «галерее» при каждом обратном вызове, чтобы я мог взять список после завершения перетаскивания и сохранить его.

Есть лиспособ достижения поведения, которое я описал ранее ??

Буду признателен за любую помощь.

Спасибо

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Помимо недопустимого объявления 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'});
}}
0 голосов
/ 02 августа 2011

Из этого небольшого фрагмента кода я на самом деле не слежу за потоком кода и не вижу достаточно информации, чтобы поместить его в jsFiddle, поэтому я просто прокомментирую ошибки, которые вижу.

Я не вижу места в вашем коде, где вы фактически назначаете функцию someCallback для вашего объекта. Возможно, вы имеете в виду для этого кода:

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

это будет то, что фактически присоединяет функцию к объекту, удаляет некоторые операторы no-op, заменяет «object» на «obj», чтобы никогда не возникало путаницы с классом «Object», и добавляет отсутствующие точки с запятой:

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

Также отсутствует много точек с запятой в конце строк и вы не знаете, почему вы передаете событие и интерфейс функции someCallback, когда вы их не используете.

...