Я говорю «класс», потому что технически классы не существуют в JS. Но вот мой упрощенный класс
function clsDragStack(divWithin,divConstrain,arrOptions){
var _divWithin,_divCont,_divOption,_arrOptions;
var _sourceStack=[]; // array to hold jQuery items referencing remaining source items. initally ALL items will be in this array.
var _selectStack=[]; // array to hold jQuery items referencing items the user has selected.
//start constructor
_divWithin=divWithin;
_arrOptions=arrOptions;
_divCont = $('div[ID^="divContainer"]',divWithin);
_divOption = $('div[ID^="divOption"]',divWithin);;
initDraggables(divConstrain);
//end constructor
function initDraggables(divConstrain){
var divDraggables = $(".draggableBasic",_divCont); //get all the draggable divs
divDraggables.each(function(i){_sourceStack.push($(this));}); //add all the children to sourcestack
};
clsDragStack.prototype.selected = function (){
return _selectStack;
};
};
Это, вероятно, не принесет ничего полезного в отдельности, но показывает интересующие вас кусочки. По сути, у меня есть столбец слева (представлен в классе _sourceStack) Пользователь может перетаскивать элементы отсюда в другой столбец (представлен _selectStack). Все это прекрасно работает, массивы _sourceStack и _selectStack перемещаются довольно счастливо. Однако, когда я пытаюсь получить доступ к содержимому _selectStack извне класса, используя ...
var arrFields=selectStack.selected();
... например - я, кажется, всегда получаю оригинальный стек, т.е. пустой. Если я пытаюсь получить доступ к _sourceStack таким же образом, я получаю исходный полный список, как будто никакие элементы не были перемещены. Я могу видеть, как изменяются _sourceStack и _selectStack при перемещении элементов.
Нужно ли делать копию массива в selected () перед передачей , что назад? Почему я не могу передать ссылку на этот объект? Я провел эксперимент с простыми строковыми массивами, и он отлично работает. Это потому, что это массивы объектов jQuery?