Застрял в создании объекта JavaScript динамически - PullRequest
1 голос
/ 06 февраля 2012

У меня есть куча интерактивных действий, которые были написаны на флэш-памяти путем чтения всех параметров из файла XML. Мы уходим от FLASH, поэтому я пишу скрипт, который будет читать нужные мне элементы XML и динамически создавать объект javascript, содержащий все элементы и их свойства. В конце я пропускаю объект через JSON.stringify () и возвращаю обратно версию в формате JSON.

Я читаю в XML, используя вызов ajax с JQUERY, а затем смесь JS и JQUERY. Мне нравится jquery для его селекторов DOM.

Я изучаю все это по ходу дела, и я не являюсь разработчиком по профессии, поэтому я попал в стену, когда подошел к моменту, когда мне нужно обработать кучу элементов с помощью .each () , Я предполагаю, что это синтаксис, хотя я не уверен. Все работало замечательно, пока не пришло время добавлять «панели», которые в XML выглядят как + ... Я должен обработать каждую панель.

$.ajax({
    type: "GET",
    url: "activity.xml",
    dataType: "xml",
    success: function(xml) {
        var activity = {
            title : {
                text: $(xml).find('title').text(), 
                xpos: $(xml).find('title').attr('xpos'), 
                ypos: $(xml).find('title').attr('ypos')
            },
        rubric : {
                text: $(xml).find('rubric').text(), 
                xpos: $(xml).find('rubric').attr('xpos'), 
                ypos: $(xml).find('rubric').attr('ypos')
            },
        panels: {
                $(xml).find('panel').each(function() {
                    panel :{width: $(this).attr('width'), 
                    height: $(this).attr('height'), 
                    xpos: $(this).attr('xpos'), 
                    ypos: $(this).attr('ypos')
            }});// end .each()
        }// end panels object
   });//end ajax.get(xml)   

   var activity_json = JSON.stringify(activity);

Я уверен, что это не так, но я не знаю, как это должно быть.

Заранее спасибо

1 Ответ

0 голосов
/ 06 февраля 2012

Ваша проблема должна быть здесь

panels: {
            $(xml).find('panel').each(function() {
                panel :{width: $(this).attr('width'), 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
        }});// end .each()

Перепишите ваш код следующим образом:

 var activity = {
        title : {
            text: $(xml).find('title').text(), 
            xpos: $(xml).find('title').attr('xpos'), 
            ypos: $(xml).find('title').attr('ypos')
        },
    rubric : {
            text: $(xml).find('rubric').text(), 
            xpos: $(xml).find('rubric').attr('xpos'), 
            ypos: $(xml).find('rubric').attr('ypos')
    },
    panels : []
 };



  $(xml).find('panel').each(function() {
           var data = {
                panel :{
                    width: $(this).attr('width')
                }, 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
           }
           activity.panels.push(data);
  });

РЕДАКТИРОВАТЬ

Вы нарушаете синтаксисобъекта буквальный.Вы должны инициализировать массив и завершить объявление объекта.Затем выполните итерацию по своей коллекции и заполните свойство panels вашего объекта соответствующим значением.

EDIT

Да.Я понимаю, что ты имеешь в виду.

Здесь - это скрипка, которая перебирает элементы вашего домена.Я использовал родной JavaScript API.Я не очень знаком, скажем, с jQuery2XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...