使用Handlebars.js创建网格的简单方法
Simple way to create a grid with Handlebars.js?
我正试图从这个数组中的对象生成一个由五个元素组成的div网格:
[{n:'a'},{n:'b'},{n:'c'},{n:'d'}...{n:'y'}];
数组可能包含1到50个对象,数据格式为来自Spine.js模型的1d数组。为了将数据和表示分离,我希望将数据保存在1d数组中,并使用视图(手把模板)代码在每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>
我有一个解决方案,通过在助手函数中返回整个字符串来工作。只有我的模板看起来像:
<script id="grid-template" type="text/x-handlebars-template">
{{#grid}}
{{/grid}}
</script>
这似乎违背了使用模板的意义。有没有一种简单的方法可以创建如上所述的网格,其中代码主要驻留在模板中?
[编辑]解决方案
根据@Sime下面的回答修改控制器中的数据。
模板代码:
<script id="grid-template" type="text/x-handlebars-template">
{{#rows}}
<div class="row">
{{#cells}}
<div class="cell">
{{n}}
</div>
{{/cells}}
</div>
{{/rows}}
</script>
控制器渲染代码():
this.data=[{n:'a'},{n:'b'},{n:'c'},{n:'d'}...{n:'y'}]; // previously set
this.rows=[];
var step=5,
i=0,
L=this.data.length;
for(; i<L ; i+=step){
this.rows.push({cells:this.data.slice(i,i+step)});
};
this.el.html(this.template(this));
所以,模板应该是:
<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;
}
现场演示:http://jsfiddle.net/emfKH/3/
尝试使用表标记示例:
<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>
您还可以提供id和类作为它们的属性,以便于操作策略。
相关文章:
- JQuery:向多个匹配结果添加换行符的最简单方法
- 访问对象的最简单方法'的单独财产
- 检查变量是否为字符串的简单方法
- 创建jQuery Slider的简单方法
- 你知道使用javascript游戏引擎的简单方法吗
- 解释分号的简单方法
- JavaScript:检查变量是否等于两个或多个值之一的简单方法
- 什么'这是使用jQuery将一些文本锚定到外部链接的最简单方法
- 实施会员系统的最简单方法是什么
- 每次使用 Javascript 加载页面时增加一个数字(变量)的简单方法
- .attr(“href”) 的问题!解决此问题的简单方法
- 出错时更改文本字段边框的最简单方法
- JavaScript:获取第一个月前 6 个月的日期的最简单方法
- 检查 redux 状态是否更改的简单方法
- 在CreateJS中加载视频的最简单方法
- 使用JavaScript过滤从网页复制的文本的最简单方法
- 创建在Javascript和PHP之间使用的唯一代码的最简单方法
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- 使用JS找出字符串中字符重复的最简单方法是什么
- 什么'这是一种基于if/if-else语句显示popover的简单方法