underscore.js _.each 外没有数据
underscore.js no data outside _.each
我正在检索一个带有 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 作为模板部分,但我无法弄清楚为什么我的数据在 _.each 循环之外不可用...
这是我的模板:
<script type="text/template" id="product-structure">
<%= data.img %>
<%= data.title %>
<%= data.price %>
<%= data.uri %>
</script>
您已经使用了两次 var
关键字。在循环中你有:
var dataResp = response;
创建一个名为 dataResp 的新变量。由于变量在js中有函数作用域,所以这个变量只存在于创建它的函数中。解决方案是将其切换为 dataResp = response;
而没有 var
您可以使用 _.map 函数,它 return 是一个新数组。我假设你想要一个对象 returned with these values.
此代码将 return 一个对象数组,每个对象将包含 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);
我正在检索一个带有 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 作为模板部分,但我无法弄清楚为什么我的数据在 _.each 循环之外不可用...
这是我的模板:
<script type="text/template" id="product-structure">
<%= data.img %>
<%= data.title %>
<%= data.price %>
<%= data.uri %>
</script>
您已经使用了两次 var
关键字。在循环中你有:
var dataResp = response;
创建一个名为 dataResp 的新变量。由于变量在js中有函数作用域,所以这个变量只存在于创建它的函数中。解决方案是将其切换为 dataResp = response;
而没有 var
您可以使用 _.map 函数,它 return 是一个新数组。我假设你想要一个对象 returned with these values.
此代码将 return 一个对象数组,每个对象将包含 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);