×

EmberJS 教程

EmberJS 概述EmberJS 环境配置EmberJS 应用EmberJS 对象模型EmberJS 模板EmberJS 路由器EmberJS 组件EmberJS 模型EmberJS 视图EmberJS 控制器EmberJS 测试EmberJS 指定查询参数

Ember 对象模型

Ember 类的定义 初始化 继承Ember 类的扩展Ember 计算属性Ember 观察者Ember 数据绑定Ember 枚举Ember 第一章对象模型小结

Ember handlebars模板

Ember handlebars基础Ember handlebars条件表达式Ember handlebars遍历标签Ember handlebars显示对象键Ember handlebars属性绑定Ember {{link-to}} 助手Ember 路由 模板执行渲染顺序Ember {{action}} 助手Ember 表单元素Ember 调试助手Ember 工具类的助手Ember 第二章模板小结

Ember 路由

Ember 路由定义Ember 指定与路由关联的模型Ember 模板渲染Ember 路由重定向Ember 路由终止挑战和激活Ember loading error子路由Ember 查询参数Ember 异步路由

Ember 组件

Ember 组件定义Ember 属性传递Ember 包裹内容自定义包裹组件的HTML标签Ember 处理事件Ember action触发变化

Ember 控制器

Ember 控制器Ember 管理控制器的依赖关系

Ember 模型

Ember model简介Ember 定义模型Ember 记录查询Ember 新建、更新、删除记录Ember 设置记录到StoreEmber model的关联关系处理Ember 元数据Ember 自定义适配器Ember 自定义序列号器

Ember 测试

Ember 测试简介Ember 验收测试Ember 单元测试

Ember handlebars遍历标签


采用与上一篇文章一样的方法,使用 ember generate route handlebars-each 命令创建了一个路由文件和一个对应的模板文件。 这一篇将为你介绍遍历标签,数组的遍历几乎在任何的常用的开发语言中都能看到,也是使用非常广泛的一个功能。下面我将为大家介绍handlebars的遍历标签,其使用方式与EL表达式几乎是一样的。我想你看一遍下来肯定也能明白了……废话少说,下面直接上演示代码吧!!

//  app/routes/handlebars.js
import Ember from 'ember';
/**
 * 定义一个用于测试的对象数组
 */
export default Ember.Route.extend({
    //  重写model回调函数,初始化测试数据
    model: function() {
        return [
            Ember.Object.create({ name: 'chen', age: 25}),
            Ember.Object.create({ name: 'i2cao.xyz', age: 0.2}),
            Ember.Object.create({ name: 'ibeginner.sinaapp.com', age: 1}),
            Ember.Object.create({ name: 'ubuntuvim.xyz', age: 3})
        ];
    }
});

如上述所示,在route类里构建了一个用于测试的对象数组,每个对象有2个属性(nameage)。 下面是显示数据的模板:


{{! 遍历在route里设置的对象数组 }}
    {{#each model as |item|}}
  • Hello everyone, My name is {{item.name}} and {{item.age}} year old.
  • {{/each}}

有没有似曾相似的感觉呢!!跟EL表达式的forEach标签几乎是一样的。不出意外你应该可以看到如下的结果。

run result

提醒:记得此时运行的URL是刚刚新建的route。 操作数组的时候注意使用官方建议的方法(如,新增使用pushObject而不是push),请看前面的文章

1,访问数组下标

有些情况我们可能需要获取数组的下标,比如有些时候可能会下标作为数据的序号。请看下面的演示:

<!-- // app/templates/handlebars.hbs -->
 
{{! 遍历在route里设置的对象数组 }}
<ul
       {{#each model as |item index|}}
              <li>{{index}} Hello everyone, My name is {{item.name}} and {{item.age}} year old.</li>
       {{/each}}
</ul>

不过这个下标是从0开始的,且你还不能想jstl中的forEach标签可以这样写{{index+1}}handlebars不允许这么写!暂时还不知道有没有类似的解决办法……

2,空数组处理

each标签内还可以使用{{else}},当数组为空的时候就会执行else代码块。

{{! 空数组处理,如果从route返回的model为空,则会执行else代码块的代码 }}
{{#each model as |item|}}
       Hello, {{item.name}}
{{else}}
       Sorry, nobody is here.
{{/each}}

为了测试效果,请把app/routes/handlebars.jsreturn语句改成“return []”。此时返回到模板上的是一个空数组,结果也和预期的一致,页面显示的是”Sorry, nobody is here.”

 

       上述的内容就是handlebarseach遍历使用实例。应该也是没什么难度的……


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)