underscore.js нет данных вне _.each

Я извлекаю файл JSONp с помощью $.ajax jQuery. Я не могу понять, как заставить петлю подчеркивания работать...

в успехе у меня есть этот код:

                success : function(response) {

                        var dataResp = '';
                        _.each(response.results, function(response, index) {

                                    var dataResp = response;

                                    var prodName = dataResp.trackName;
                                    var prodUri = dataResp.trackViewUrl;
                                    var prodUri = dataResp.trackViewUrl;
                                    var prodUri = dataResp.trackViewUrl;
                                    var prodPrice = Math.round(dataResp.trackPrice);
                                    var prodImg = dataResp.artworkUrl100.replace("100x100bb.", "700x700bb.");

                                    console.log(prodName); // returns all product names, and that's fine

                        }, this);

                        console.log(dataResp); // dataResp is empty


                                var html = "";
                                var compiled = _.template($("#product-structure").html(), dataResp );

                                _.each(dataResp, function(data) { // loop to compile template for all the elements inside the jsonp response
                                  html += compiled(data);
                                });

                                $('#data').html(html); // append to html the compiled template


                }

Я использую underscore.js для шаблонной части, но я не могу понять, почему мои данные не доступны вне этого цикла _.each...

вот мой шаблон:

<script type="text/template" id="product-structure">
<%= data.img %>
<%= data.title %>
<%= data.price %>
<%= data.uri %>
</script>

2 ответа

Решение

Вы можете использовать функцию _.map, которая возвращает новый массив. Я предполагаю, что вы хотите вернуть объект с этими значениями.

Этот код вернет массив объектов, каждый из которых будет содержать prodName, prodUri, prodPrice и prodImg.

var dataResp = _.map(response.results, function(response, index) {
    return {
        prodName: response.trackName,
        prodUri: response.trackViewUrl,
        prodPrice: Math.round( response.trackPrice ),
        prodImg: response.artworkUrl100.replace( "100x100bb.", "700x700bb")
    };
}, this);

Вы должны использовать var ключевое слово дважды. Внутри цикла у вас есть:

var dataResp = response; который создает новую переменную с именем dataResp. Поскольку переменные имеют область действия функции в js, эта переменная существует только в той функции, в которой она создана. Решение состоит в том, чтобы переключить его на dataResp = response; без var

Другие вопросы по тегам