Клуб API Карт

Обращение к элементу коллекции в YMapsML

Пост в архиве.

Есть файл http://ovvk-info.narod.ru/lenObl.xml

Как получить доступ к любому, например, первому элементу коллекции.

 

Перебор получается:

 



YMaps.Events.observe(ml[0], ml[0].Events.Load, function () {
 
    ml[0].get(0).forEach(function (obj) {  
 
        alert(obj.metaDataProperty.AnyMetaData.winter);
 
    });

});

 

Кажется что должно работать так:



ml[0].get(0).get(0).metaDataProperty.AnyMetaData.winter

Но ничего не выходит.

8 комментариев
Вы точно обращаетесь к элементу после загрузки YMapsML?
Да. А иначе как объяснить, что функция forEach срабатывает?
Ниже вы сами себя поправили)
Вы правы должно работать и у меня работает.
var ml = new YMaps.YMapsML("http://ovvk-info.narod.ru/lenObl.xml");
YMaps.Events.observe(ml, ml.Events.Load, function (data) {
    alert(data.get(0).get(0).metaDataProperty.AnyMetaData.winter);
});
Попробуйте сделать пример демонстрирующий проблему и дайте ссылку или код.

Все заработало.

Наверно я пытался выполнить все просто: 

alert(ml[0].get(0).get(0).metaDataProperty.AnyMetaData.winter);

 


А надо было ловить событие Load: 

YMaps.Events.observe(ml[0], ml[0].Events.Load, function () {
     alert(ml[0].get(0).get(0).metaDataProperty.AnyMetaData.winter); /*metaDataProperty.AnyMetaData.winter*/
});


Не пойму, почему:

 

YMaps.Events.observe(ml[0], ml[0].Events.Load, function (data) {
    alert(ml[0].get(0).get(1).metaDataProperty.AnyMetaData.winter);
});     
срабатывает. А вот это не работает:

 


 

YMaps.Events.observe(ml[0], ml[0].Events.Load, function (data) {
    YMaps.jQuery("#ClDataID").append(ml[0].get(0).get(0).metaDataProperty.AnyMetaData.winter);
});
Ссылка - http://ovvk-info.narod.ru/maps-climat5.html       

Тихо сам с собой веду беседу.

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

YMaps.jQuery("#ClDataID").append(String(ml[0].get(0).get(0).metaDataProperty.AnyMetaData.winter));

 

Да, дело в том, что значения в metaDataProperty лежат в виде объектов String, и jQuery определяет их как объекты. Это сделано для того чтобы можно было передавать xml ноды со строковым значением и атрибутами.  В ообщем виде это значение можно использовать точно так же как строку. Но, в случае если используемый вами фреймворк реализует разное поведение в зависимости от типа, ему приходится подсказывать. В вашем случае  вы произвели явное приведение к типу string.
var strObj = new String("");
typeof strObj // "object"
typeof String(strObj) // "string"
typeof (strObj + "") // "string"
typeof (1 + strObj) // "string"