Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用handlebar.js创建网格的简单方法?_Javascript_Templates_Handlebars.js - Fatal编程技术网

Javascript 使用handlebar.js创建网格的简单方法?

Javascript 使用handlebar.js创建网格的简单方法?,javascript,templates,handlebars.js,Javascript,Templates,Handlebars.js,我正试图从该数组中的对象生成一个五个元素宽的div网格: [{n:'a'},{n:'b'},{n:'c'},{n:'d'}...{n:'y'}]; 该数组可能包含1到50个对象,数据格式为来自Spine.js模型的1d数组。为了分离数据和表示,我希望将数据保存在1d数组中,并使用view(Handlebar模板)代码在每5项上开始一行,如下所示: <div class="grid"> <div class="row"> <div class="cell

我正试图从该数组中的对象生成一个五个元素宽的div网格:

[{n:'a'},{n:'b'},{n:'c'},{n:'d'}...{n:'y'}];
该数组可能包含1到50个对象,数据格式为来自Spine.js模型的1d数组。为了分离数据和表示,我希望将数据保存在1d数组中,并使用view(Handlebar模板)代码在每5项上开始一行,如下所示:

<div class="grid">
  <div class="row">
    <div class="cell"> a </div>
    <div class="cell"> b </div>
    <div class="cell"> c </div>
    <div class="cell"> d </div>
    <div class="cell"> e </div>
  </div>
  <div class="row">
    <div class="cell"> f </div>
    etc...
</div>

A.
B
C
D
E
F
等
我有一个解决方案,通过在助手函数中返回整个字符串。只有我的模板看起来像:

<script id="grid-template" type="text/x-handlebars-template">
  {{#grid}}
  {{/grid}}
</script>

{{{#网格}
{{/grid}
这似乎违背了使用模板的意义。有没有一种简单的方法来创建上面这样的网格,其中代码主要驻留在模板中

[编辑]解决方案 根据下面@Sime的回答修改控制器中的数据

模板代码:

<script id="grid-template" type="text/x-handlebars-template">
  {{#rows}}
    <div class="row">
      {{#cells}}
        <div class="cell">
          {{n}}
        </div>
      {{/cells}}
    </div>
  {{/rows}}
</script>

{{#行}
{{#细胞}
{{n}}
{{/cells}
{{/行}
控制器呈现代码():

this.data=[{n:'a'},{n:'b'},{n:'c'},{n:'d'}…{n:'y'}];//先前设定
this.rows=[];
var阶跃=5,
i=0,
L=此.data.length;

对于(;i尝试使用表标记示例:

<table>
<thead>
<th>head 1</th>
<th>head 2</th>
<th>head 3</th>
</thead>
<tbody>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
</tr>
</tbody>
</table>

总目1
总目2
总目3
第1栏
第2栏
第3栏

您还可以提供ID和类作为它们的属性,以便于操作策略。

因此,模板应该是:

<script id="template" type="x-handlebars-template">
    <div class="grid">
        {{#each this}}
        <div class="row">
            {{#each this}}
            <div class="cell">{{n}}</div>
            {{/each}}
        </div>
        {{/each}}
    </div>
</script>

实时演示:

需要比表格更大的灵活性,尽管这不是重点。这个答案没有使用把手,这是主要的挑战。网格的CSS已经可以使用了。@Adam更大的灵活性?你能详细说明吗?@Šime表格不允许单元格重叠等视觉效果。Šime,谢谢。数据来自我是Spine.js模型。为了保持数据和表示分离,我尝试使用视图代码(即模板和助手fn,如果需要)完全呈现数据.@Adam你能用你的数据结构更新你的问题吗?它是二维数组吗?@Adam好的,我已经更新了我的答案以反映新的信息。单元格的宽度和高度是否相同?
<script id="template" type="x-handlebars-template">
    <div class="grid">
        {{#each this}}
        <div class="row">
            {{#each this}}
            <div class="cell">{{n}}</div>
            {{/each}}
        </div>
        {{/each}}
    </div>
</script>
function transform ( arr ) {
    var result = [], temp = [];
    arr.forEach( function ( elem, i ) {
        if ( i > 0 && i % 5 === 0 ) {
            result.push( temp );
            temp = [];
        }
        temp.push( elem );
    });
    if ( temp.length > 0 ) {
        result.push( temp );
    }
    return result;
}