javascript - 返回模板表中行和列的索引

标签 javascript jquery handlebars.js template-engine indexof

我有一个通过 Handlebars.js 作为模板创建的动态表,问题是我无法将 id 分配给每个单元格,将其位置表示为行和列。我有下面的模板,

<script id="td-template" type="text/x-handlebars-template">
    {{#each ships}}
    <tr>
        <td class='left-aligned'>{{this.name}}</td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
        <td class="default" id="id{{@index}}"></td>
    </tr>
    {{/each}}
</script>

第一个循环返回 0,第二个循环返回 1,反之亦然。我需要的是添加一个公式而不是 {{@index}} 但它不允许我在我打算添加时破坏 html 或表格本身。

我愿意接受任何建议,例如使用 JQuery 代替 Handlebars.js

最佳答案

您可以定义一个辅助函数,如下所示:

var columnsCount = 3; // change this to the total number of columns per row in your table.
Handlebars.registerHelper("multiply", function(index, count){
    return (index * columnsCount) + count;
});

然后使用如下方式设置 ID:

<script id="td-template" type="text/x-handlebars-template">
    {{#each ships}}
    <tr>
        <td class='left-aligned'>{{this.name}}</td>
        <td class="default" id="id{{multiply @index 1}}"></td>
        <td class="default" id="id{{multiply @index 2}}"></td>
        <td class="default" id="id{{multiply @index 3}}"></td>
        .....
    </tr>
    {{/each}}
</script>

以下是显示此方法实际效果的片段:

var columnsCount = 3; // change this to the total number of columns per row in your table.
Handlebars.registerHelper("multiply", function(index, count){
    return (index * columnsCount) + count;
});

var context = {
  ships: [{
    name: 'ship one'
  }, {
    name: 'ship two'
  }]
};

$('#rendered').append(Handlebars.compile($("#td-template").html())(context));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.6/handlebars.js"></script>

<script id="td-template" type="text/x-handlebars-template">
    <table>
      <tbody>
        {{#each ships}}
        <tr>
            <td class='left-aligned'>{{this.name}}</td>
            <td class="default" id="id{{multiply @index 1}}">column {{multiply @index 1}}</td>
            <td class="default" id="id{{multiply @index 2}}">column {{multiply @index 2}}</td>
            <td class="default" id="id{{multiply @index 3}}">column {{multiply @index 3}}</td>
            <!-- and so on.... -->
        </tr>
        {{/each}}
      </tbody>
    </table>
</script>

<div id="rendered"></div>

关于javascript - 返回模板表中行和列的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43629224/

相关文章:

javascript - Handlebar模板访问nodejs中的mongo collection.find()变量

java - 使用 smartgwt 防止用户留下未保存的表单

javascript - 响应式jquery粘性问题

javascript - 根据 UTF-8 十六进制代码处理字符

jQuery 属性自动添加到元素

c# - Javascript 无法在内容中运行

ruby-on-rails - 如何确定 Rails Assets 管道中给定 Assets 的 MD5 摘要?

javascript - 使用 Node.js 和 Handlebars 循环访问 Mongo 数据库

javascript - 如果我附加相同的 js 脚本两次,代码会重复吗?

javascript - 如何中断 compose 或 pipe 并返回所有当前数据?