Клуб API Карт

Заголовок не указан

Jonstonrich
3 августа 2012, 12:44

Проблема такая.Вывожу метки из базы на карту.Создаю из них коллекцию.После перемещения нескольких меток есть возможность сохранить в базе их координаты.В цикле прохожу по элементам соллекции, но увы координаты не меняются.Посмотрите вобщем код:

http://test.codemaster.com.ua/add_point_action.php

Почему data всегда последнего элемента?

4 комментария
Подписаться на комментарии к посту

ты пушишь в массив один и тот же объект

 Перенеси создание data в обработчик each


collection.each(function(obj){
var data = {};
data['id'] = obj['id'];
data['coords'] = obj.geometry.getCoordinates();
//alert(data['coords']);
console.log(points);
points.push(data);
});

окей.А что он javascript не переопределяет значения на лету?

переопределяет но ты же перезаписываешь поле coords в одном и том же объекте

data['coords'] = obj.geometry.getCoordinates();

и потом его добавляешь в массив

т.е. каждый элемент в твоем массиве ссылается на один и тот же объект, поле coords которого имеет последнее присвоенное ему значение

До тех пор, пока ты не сделаешь data = {};, ты будешь писать в предыдущий созданный объект.

{} - суть new Object, в этот момент выделяется новая память под него. Вот у тебя и получалось, что ячейка памяти была одна и та же, а твой массив был набором ссылок на неё одну. То есть вроде бы в массиве 50 элементов, но это 50 ссылок на один и тот же объект. points[0]  === points[1] // true.

Ну и про var тоже очень правильное замечание. ;-)

Можно вот это почитать, например: http://bonsaiden.github.com/JavaScript-Garden/ru/