Ember.js 计算的属性学习笔记

例子:

 代码如下 复制代码

App.Person = Ember.Object.extend({
  id: null,
  firstName: null,
  lastName: null,
  age: null,
  gender: null
});

在 handlebars 模板里使用:

我的名字叫{{firstName}}{{lastName}},{{gender}}性,今年{{age}}岁。
假定我还想根据 age 的值来划分「幼年」、「少年」、「青年」、「壮年」、「老年」又如何?

Ember.js 提供的计算的属性可以很方便地解决这种问题,只需要给 Person 类增加一个属性 – 唯一的区别是,这个属性不是静态的,而是动态的一个函数:

 代码如下 复制代码

App.Person = Ember.Object.extend({
  id: null,
  firstName: null,
  lastName: null,
  age: null,
  gender: null,
  ageClass: function() { // <- 这就是我们要定义的计算属性,在函数体中可以做逻辑判断
    var age = this.get('age');
    switch (true) {
      case age > 0 && age < 6:
        return '幼年';
        break;
      case age >= 6 && age < 18:
        return '少年';
        break;
      case age >= 18 && age < 30:
        return '青年';
        break;
      case age >= 30 && age < 60:
        return '壮年';
        break;
      case age >= 60:
        return '老年';
        break;
  }.property('age') // <- 这个是计算的属性与普通属性的一个区别
});

注意函数后紧跟着的 property,它声明了该计算的属性与其他属性的依赖关系。age 值如果有变化,它的值会自动更新。

创建对象实例时,我们不需要传入计算的属性参数,

 代码如下 复制代码

App.Person.create({
  id: 1,
  firstName: '三',
  lastName: '陈',
  age: 18,
  gender: '男'
});

Ember.js 会自动生成 ageClass,可直接在前端模板上使用:

我的名字叫

 代码如下 复制代码
{{firstName}}{{lastName}},{{gender}}性,今年{{age}}岁,据称属于{{ageClass}}。

渲染后的内容为:

我的名字叫三陈,男性,今年18岁,据称属于青年。

类似的问题,除了使用计算的属性外,我们还可以用 Handlebars 助手2,不过我个人更喜欢用计算的属性,因为它们多数跟其他静态属性相关,写在类定义里会更直观

时间: 2024-08-02 21:34:45

Ember.js 计算的属性学习笔记的相关文章

Vue.js第四天学习笔记_javascript技巧

分享一段将json数组数据以csv格式导出的代码: html: <button class="btn btn-danger" @click='exportData'>导出</button> js: // 导出数据 exportData: function() { let tableHeader = [{ colname: 'type', coltext: '类型', }, { colname: 'name', coltext: '商品名称', }, { coln

js内置对象 学习笔记_javascript技巧

mark相关的知识点: 首先,什么是js的内置对象,它包括了些什么内容?(以下内容转自网上资源的整合) (W3shool JS手册地址:http://www.jb51.net/w3school/js/js_reference.htm) 作为一门编程语言,JavaScript提供了一些内置的对象和函数.内置对象提供编程的几种最常用的功能.JavaScript内置对象有以下几种. ● String对象:处理所有的字符串操作 ● Math对象:处理所有的数学运算 ● Date对象:处理日期和时间的存储

Vue.js第四天学习笔记(组件)_javascript技巧

在这篇文章之前小颖分享过小颖自己写的组件:Vue.js组件tabs实现选项卡切换效果和Tree升级版(实现省市多级联动) 先给大家看下小颖写了一个简单的组件示例: 组件: <template> <div class='content' v-if='showFlag'> <input type="text" v-bind:style='{ width:compwidth+"px"}' v-model='compvalue' @keyup=

Node.js异步I/O学习笔记_node.js

"异步"这个名词的大规模流行是在Web 2.0浪潮中,它伴随着Javascript和AJAX席卷了Web.但在绝大多数高级编程语言中,异步并不多见.PHP最能体现这个特点:它不仅屏蔽了异步,甚至连多线程也不提供,PHP都是以同步阻塞的方式来执行.这样的优点利于程序猿顺序编写业务逻辑,但在复杂的网络应用中,阻塞导致它无法更好地并发. 在服务器端,I/O非常昂贵,分布式I/O更加昂贵,只有后端能快速响应资源,前端的体验才能变得更好.Node.js是首个将异步作为主要编程方式和设计理念的平台

Silverlight:Dependency Property(依赖属性)学习笔记

1.定义依赖属性:           #region Text        public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ImageButton), new PropertyMetadata(default(string), new PropertyChangedCallback(TextPrope

《Ember.js实战》——2.3 计算属性

2.3 计算属性 计算属性是一个函数,其返回一个从其他变量或表达式(也可以是其他计算属性)获取的值.计算属性与普通JavaScript函数之间的区别在于,Ember.js将计算属性看作其真正的属性.因此,就可以在计算属性上调用get()和set()等`方法,以及绑定/观察它们(观察者概念在本章稍后介绍).通常,在模型对象中定义计算属性,并在控制器和视图中使用它. 目前的记事本应用程序还没用上计算属性,但如果你想增强应用程序功能,在界面左边的事项列表中显示每条事项前20个字符的内容,那么,就请忘掉

学习vue.js计算属性_javascript技巧

关于vue.js的计算属性练习代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vuejs计算属性</title> </head> <body> <!-- 字母反转方式一:不推荐 --> <div id="app-1&quo

《从零开始学Swift》学习笔记(Day 32)——计算属性

原创文章,欢迎转载.转载请注明:关东升的博客  计算属性本身不存储数据,而是从其他存储属性中计算得到数据.  计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值.计算属性的语法格式如下: 面向对象类型 类型名 { 存储属性 ...... var 计算属性名: 属性数据类型 { get { return 计算后属性值 } set (新属性值) { ...... } } } 定义计算属性比较麻烦,要注意后面的几个

Ember.js 模板预编译的学习笔记

Ember.js 里,如果把模板直接写在 index.html 文件中,是这样写的:  代码如下 复制代码 <script type="text/x-handlebars" data-template-name="application"> // 最顶级的模板 ... {{outlet}} </script> <script type="text/x-handlebars" data-template-name=&q