使用jquery的forEach和templatePlugin附加<div>

时间:2015-08-18 13:34:04

标签: javascript jquery foreach jquery-templates

我因为以下问题而捣乱了几个小时:

  1. 使用jquery&#39; s forEach方法
  2. 遍历对象
  3. 对于每个对象元素,应使用模板,该模板也会填充模板中的信息。我正在使用的插件:jquery-tempalte
  4. 对于每个对象,模板应附加到<div>
  5. 不幸的是,只有最后一个对象元素可视化并加载到DOM。在之前的步骤中创建的所有其他div都被覆盖。

    在这里找到一个jsFiddle,它演示了我的问题:http://jsfiddle.net/7oq053od/1/

    你有什么想法,我错过了什么? 很高兴得到一些反馈:)

4 个答案:

答案 0 :(得分:1)

附加多个div。你应该创建一个包含所有子div的主容器,并且在显示时,每个div元素都会被创建并且每次附加到主容器。 这是一个示例代码:

<div id="container"></div> 

//now in javascript create child div elements and append to main container
<script>

for(var items in data)
{
  var newChild = $(document.createElement('div'));  
    $(newChild).css({
    //some css code
    });
 //now appending it to main container
$('#container').append(newChild);
}

</script>

答案 1 :(得分:1)

模板插件似乎将模板化值应用于同一元素。如果克隆元素,则脚本可以正常工作。

$.each(results.features, function (key, value) {
    $("#homeView").clone().loadTemplate($("#template"), {
        geoFenceName: value.attributes.title,
        geoFenceDescription: value.attributes.description
    }).appendTo('#fences');
});

请参阅更新的小提琴this

答案 2 :(得分:1)

从github网页上的Options部分,您可以看到第三个参数,append属性设置为true。 只需考虑将其添加到您的脚本中,如下所示:

$.each(results.features, function (key, value) {
    $("#homeView").loadTemplate($("#template"), {
        geoFenceName: value.attributes.title,
        geoFenceDescription: value.attributes.description
    }, {append: true});
});

这是一个有用的 JsFiddle

答案 3 :(得分:1)

问题是loadTemplate函数会覆盖div。您可以通过克隆模板容器来修复它,然后将其附加到'#homeWiew'。

我从你的jsfiddle创建了一个对我有用的分支:

http://jsfiddle.net/6ksdnejw/