Как использовать .each для построения массива - PullRequest
0 голосов
/ 18 июня 2020

Итак, мы работаем в этой системе и создаем нашу собственную страницу. Мы создали форму для вставки данных временной шкалы с использованием файла .xwd. Мы используем javascript, чтобы получить данные и заполнить их переменной для хранения. На главной странице (title:) есть только отдельные значения, но фактические события должны быть в массиве.

Я хочу использовать V для заполнения массива.

$(x_currentPageXML).children().each(function(index, elem){

});

Прямо сейчас у меня есть это, и я хочу заполнить массив «событий», используя foreach, который я показал выше. Помещение .each внутрь var не сработало, и я бы не знал, как еще это сделать.

    var SictTimeline = new function() {     
            this.loadJS = function () {
        $.getScript(x_templateLocation + 'common_html5/js/timeline.js')
            .done(function (script, textStatus) {
                var make_the_json = $(x_currentPageXML).children().map(function (element) {
                    return {
                        title: {
                            media: {
                                url: element.getAttribute("url"),
                                caption: element.getAttribute("tip"),
                            },
                            text: {
                                headline: element.getAttribute("name"),
                                text: '<p>' + element.getAttribute("text") + '</p>'
                            }
                        },
                        events: {
                            media: {
                                url: element.getAttribute("url"),
                                caption: element.getAttribute("tip"),
                            },
                            start_date: {
                                month: '8',
                                day: '9',
                                year: '1963'
                            },
                            text: {
                                headline: element.getAttribute("name"),
                                text: element.getAttribute("text")
                            }
                        }
                    }
                })

                var timeline_json = make_the_json; // replace make_the_json() with the JSON object you created
                // two arguments: the id of the Timeline container (no '#')
                // and the JSON object or an instance of TL.TimelineConfig created from
                // a suitable JSON object
                window.timeline = new TL.Timeline('timeline-embed', timeline_json);
            })
            .fail(function (jqxhr, settings, exception) {
                console.log('Failed to load the script for the timeline');
            });
    }
    // function called every time the page is viewed after it has initially loaded
    this.pageChanged = function() {

    }

    // function called every time the size of the LO is changed
    this.sizeChanged = function() {

    }

    this.init = function() {
        this.loadJS();
        // call this function in every model once everything's loaded
        x_pageLoaded();
    }
}

Пример файла xml со значениями

<?xml version="1.0"?>
<learningObject editorVersion="3" targetFolder="Nottingham" name="Learning Object Title" language="en-GB" navigation="Linear" textSize="12" theme="default" displayMode="fill window" responsive="true">

<SictTimeline linkID="PG1592486441661" name="My page" media="SictTimeline" text="&lt;p&gt;Text for my page&lt;/p&gt;&#10;" url="FileLocation + 'media/https___images.genius.com_53c4575fa3f97a8d4b18d69a600afaf0.900x900x1.jpg'" tip="Description for Image 1"></SictTimeline></learningObject>

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Думаю, вы пытаетесь создать массив объектов на основе количества (и свойств) элементов внутри $(x_currentPageXML). Для этого вам нужно использовать метод .map():

    events: $(x_currentPageXML).children().map(function (index, element) {
        return {
            media: {
                url: element.getAttribute("url"),
                caption: element.getAttribute("tip"),
            },
            start_date: {
                month: '8',
                day: '9',
                year: '1963'
            },
            text: {
                headline: element.getAttribute("name"),
                text: element.getAttribute("text")
            }
        }
    }).get()
0 голосов
/ 18 июня 2020

Я не уверен, что полностью понимаю вопрос, но вы хотите извлечь что-то из каждого элемента в l oop, верно? Замените x_currentPageXML на elem внутри l oop


var result = []

$(x_currentPageXML).children().each(function (index, elem) {
    var make_the_json = {
        title: {
            media: {
                url: elem.getAttribute("url"),
                caption: elem.getAttribute("tip"),
            },
            text: {
                headline: elem.getAttribute("name"),
                text: '<p>' + elem.getAttribute("text") + '</p>'
            }
        },
        events: [
            {
                media: {
                    url: elem.getAttribute("url"),
                    caption: elem.getAttribute("tip"),
                },
                start_date: {
                    month: '8',
                    day: '9',
                    year: '1963'
                },
                text: {
                    headline: elem.getAttribute("name"),
                    text: elem.getAttribute("text")
                }
            }
        ]
    };

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