使用typeahead.js我在json响应中从颜色项创建li元素
JSON:
"results": [
{
"title": "The Collection",
"attribute": "The Collection",
"url": "#/test",
"image": "images/products/londonretro-caine.jpg",
"color": ["brown", "yellow", "grey"]
},
json有一个颜色键,有时是一个字符串,有时是一个有多种颜色的数组
我已经完成了响应并动态创建了一个HTML
html += '<li></li>'
我添加了一个条件来检查json中的项是否是一个颜色数组。 如果它是一个颜色数组,我已经用尽可能多的li项替换了html,因为数组中有颜色
我尝试了两种方法:
1.一个是我使html等于新的li元素,如:html += '<li></li>...'
html.push('<li></li>')
使用方法1,我得到以下结果:
我在一个单独的li中获得所有颜色, 但我也得到了一个额外的第一个颜色,如:
<li class='product-spot__variants-variant' style='background-color:brown,yellow,grey' title='brown,yellow,grey'>'brown,yellow,grey'</li>
使用方法2,我只得到最后一个颜色的最后一个:
<li class='product-spot__variants-variant' style='background-color:grey' title='grey'>'grey'</li>
我在以下代码中留下了两个解决方案。 有任何想法吗?谢谢,请问它是否不清楚..
我的先行代码:
suggestion: function (item) {
var glassesColor = item.color;
var html = "<li class='product-spot__variants-variant' style='background-color:"+ glassesColor +"' title='"+ glassesColor +"'>'"+ glassesColor +"'</li>";
_.forEach(item.color, function (k) {
if (typeof item.color === 'object') {
html += "<li class='product-spot__variants-variant' style='background-color:"+ k +"' title='"+ k +"'>'"+ k +"'</li>";
html = [];
html.push("<li class='product-spot__variants-variant' style='background-color:" + k + "' title='" + k + "'>'" + k + "'</li>");
var myhtml = html.join('');
html = myhtml;
}
});
//console.log(html);
var output = '<div class="search-autocomplete search-glasses">\n';
output += '<a href="' + item.url + '">';
output += (item.image ? '<img class="search-autocomplete__image" src="' + item.image + '" alt="' + item.title + '">' : '');
output += '<span class="search-autocomplete__title">' + item.title + '</span>';
output += (item.attribute ? '<span class="search-glasses__attribute">' + item.attribute + '</span>' : '');
output += '<ul class="product-spot__variants">';
output += html;
output += '</ul>';
output += '</a>\n';
output += '</div>\n';
return output;
}
答案 0 :(得分:1)
好吧所以我只是为字符串创建了另一个条件并将html等于代码放在那里.. 否则一切都很好
if (typeof item.color === 'string') {
html = "<li class='product-spot__variants-variant' style='background-color:"+ glassesColor +"' title='"+ glassesColor +"'>'"+ glassesColor +"'</li>";
}