2017-04-10 56 views
1

我有一个index.html,我有表格,那我用JavaScript填充:的Javascript - 创建表车把

<div class="table-responsive table-hover"> 
    <table class="table" id="table"> 
    </table> 
</div> 

我创建车把模板文件:

<tr> 
    <td>{{ avatar }}</td> 
    <td>{{ name }}</td> 
    <td>{{ homepage }}</td> 
    <td>{{ score }}</td> 
</tr> 

在我的脚本中,我导入模板并尝试发送数据,这是我从api端点获得的对象数组,我首先在array对象上执行forEach循环,然后调用createHtml函数:

var tableTemplate = require('../../templates/table.handlebars'); 

var createHtml = function(data) { 
    console.log(data); 
    var table = document.querySelector('#table'); 
    table.innerHTML = tableTemplate({ 
     avatar: data.owner.avatar_url, 
     name: data.full_name, 
     homepage: data.homepage, 
     score: data.score 
    }); 
} 

array.forEach(createHtml); 

但是,即使我得到登录的功能createHtml只有正在创建表的第一行内的所有主机从阵列的对象,这是为什么,我该如何解决?

更新

我已经试过这样的事情,但我得到表未定义:

var tableTemplate = require('../../templates/table.handlebars'); 

var createHtml = function(data) { 
    console.log(data); 

    table += tableTemplate({ 
     avatar_url: data.owner.avatar_url, 
     full_name: data.full_name, 
     homepage: data.homepage, 
    score: data.score 
    }); 
} 

export function createTable(repositories, page) { 
    var itemsPerPage = 20, 
     offset = page*20; 

    table = document.querySelector('#table'); 
    table.innerHTML = ''; 

    repositories.slice(offset, offset+itemsPerPage).forEach(createHtml); 
} 

回答

0

您正在更换使用的innerHTML每次迭代的HTML,从以前的迭代失去HTML。连接所有字符串并在forEach之外设置一次innerHTML。更好的选择(仅使用局部变量)是使用Array#mapArray#join

var tableTemplate = require('../../templates/table.handlebars'); 

document.querySelector('#table').innerHTML = array.map(function(data) { 
    return tableTemplate({ 
     avatar: data.owner.avatar_url, 
     name: data.full_name, 
     homepage: data.homepage, 
     score: data.score 
    }); 
}).join(''); 
+0

您能否给我提供一个代码示例,不知道如何做到这一点,我将非常感激!谢谢! – Leff

+0

我可以,如果你尝试一些东西,并显示你的尝试。基本上你需要在createHtml之外定义一个字符串,并将其连接到createHtml中,并且需要使用串联在一起的字符串变量来从createHtml外部设置innerHTML。 –

+1

我尝试了一些东西,我不知道这是你的意思。只是不能得到它的工作。我已经用我的尝试更新了我的问题。 – Leff