0

Я получаю файл JSONp с $ .ajax jQuery. Я не могу понять, как сделать работу цикла подчеркивания ... в успехеunderscore.js данных за пределами _.each

Я это этот код:

   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> 

ответ

0

Вы можете использовать функцию _.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); 
+0

спасибо. Не знал о картировании. Картирование работает, но когда я пытаюсь выполнить цикл, а затем добавить #data, он добавляет 1 объект, и он пуст ... –

+0

whoa! неважно, я узнал, в чем была ошибка. Еще раз спасибо fayzaan !! –

+0

хорошо знать. без проблем. – fayzaan

0

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

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

Смежные вопросы