underscore.js在_之外没有数据.each

underscore.js no data outside _.each

本文关键字:数据 each js underscore      更新时间:2023-09-26

我正在用jQuery的$.ajax检索一个JSONp文件。我不知道如何使下划线循环工作。。。

在成功中,我有这个代码:

                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作为模板部分,但我不明白为什么我的数据在_之外不可用。每个循环。。。

这里是我的模板:

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

您可以使用_.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关键字。在循环内部:

CCD_ 2创建一个名为dataResp的新变量。由于变量在js中具有函数作用域,因此此变量仅存在于创建它的函数中。解决方案是在没有var 的情况下将其切换到dataResp = response;