一、What are computed properties?

1. 简而言之,计算属性让你声明函数为属性。你通过定义一个计算属性作为一个函数来创建一个,当你请求这个属性时,Ember会自动调用这个function。

之后你可以用同样的方法使用它,任何正常静态属性。

2. 对于获取一个或多个正常的属性和转换或者操纵它们的数据去创建一个新的值,它是超级方便的。

二、Computed Properties In Action

example:

Person = Ember.Object.extend({
//these will be supplied by 'create'
firstname: null,
lastName: null fullName: Ember.computed('firstName', 'lastName', function () {
return this.get('firstName') + ' ' + this.get('lastName');
});
}); var ironMan = Person.create({
firstName: "Tony",
lastName: "Stark"
}); ironMan.get('fullName');//"Tony Stark"
  • 这里声明了一个function去作为一个计算的属性,参数告诉Ember它依赖于firstNamelastName属性。
  • 不管什么时候你访问fullname属性,这个function会被调用,并返firstname+lastname的值。

三、Chaining Computed Properties(计算属性链)

可以使用计算属性作为值去创建新的计算属性。

example:这里为上一个例子添加description计算属性,使用存在的fullName属性并添加一些其他的属性。

 Person = Ember.Object.extend({
firstName: null,
lastName: null,
age: null,
country: null, fullName: Ember.computed('firstName', 'lastName', function () {
return this.get('firstName') + ' ' + this.get('lastName');
}); description: Ember.computed('fullName', 'age', 'country', function () {
return this.get('fullName') + '; Age: ' + this.get('age') + '; Country:' + this.get('country');
});
}); var captainAmerica = Person.create({
firstName: 'Steve',
lastName: 'Rogers',
coutnry: 'USA''
}); captainAmerica.get('description');//"Steve Rogers; Age: 80; Country: USA"

四、Dynamic Updating

可计算的属性,默认情况下,观察它们所依赖的属性,并在调用时动态更新。让我们使用计算的属性来动态更新。

captainAmerica.set('firstName', 'William');
captainAmerica.get('description');//"William Rogers; Age:80; Country: USA"
  • 这个firstName的改变被计算的属性fullName观察到,它自己被description属性观察到。
  • 设置任何相关的属性都会通过任何依赖于它们的计算属性来传播变化,你已经创建了一条计算属性链。

五、Setting Computed Properties

当你设置计算的属性的时候你也可以定义Ember应该做什么。如果你试着设置计算的属性,它将会通过属性名被调用,你想设置的值和以前的值。

Person = Ember.Object.extend({
firstName: null,
lastName: null, fullName: Ember.computed('firstName', 'lastName', {
get(key) {
return this.get('firstName') + ' ' + this.get('lastName');
},
set(key, value) {
var [ firstName, lastName ] = value.split(/\s+/);
this.set('firstName', firstName);
this.set('lastName', lastName);
}
});
}); var captainAmerica = Person.create();
captainAmerica.set('fullName', "William Burnside");
captainAmerica.get('firstName');//William
captainAmerica.get('lastName');//Burnside  

Ember将会为settersgetters调用计算的属性,如果你想要使用计算的属性来作为一个setter,你需要去检查参数的个数来确定是否是被作为一个gettersetter调用。如果一个值是从setter返回的,它将会被缓存在属性的值里。

2.3 The Object Model -- Computed Properties的更多相关文章

  1. 2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)

    1. 通常,你可能有一个计算的属性依赖于数组中的所有元素来确定它的值.例如,你可能想要计算controller中所有todo items的数量,以此来确定完成了多少任务. export default ...

  2. 2.7 The Object Model -- Bindings, Observers, Computed Properties:What do I use when?

    有时候新用户在使用计算属性.绑定和监视者时感到困惑.下面是一些指导方针: 1. 使用computed properties来合成其他属性,以构建新的属性.computed properties不应该包 ...

  3. (3)选择元素——(2)文档对象模型(The Document Object Model)

    One of the most powerful aspects of jQuery is its ability to make selecting elements in the DOM easy ...

  4. object model 概述

    Object Model 综述 标准 C++ 的对象模型为对象的动态特性提供了运行时的支持. 但是它静态的本性决定了在某些领域它表现出僵化.不可扩展的特点. GUI编程就是一个既需要运行时编译的效率, ...

  5. Stored Properties 与 Computed Properties

    Stored Properties 与 Computed Properties About Swift Stored Properties In its simplest form, a stored ...

  6. POM(project Object Model) Maven包管理依赖 pom.xml文件

    什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法 ...

  7. [转]The Regular Expression Object Model

    本文转自:https://docs.microsoft.com/en-us/dotnet/standard/base-types/the-regular-expression-object-model ...

  8. Component Object Model (COM) 是什么?

    本文主要介绍 COM 的基础知识,倾向于理论性的理解,面向初学者,浅尝辄止. 1. COM 是什么: COM 的英文全称是,Component Object Model,中文译为,组件对象模型.它官方 ...

  9. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

随机推荐

  1. JQuery--使用autocomplete控件进行自己主动输入完毕(相当于模糊查询)

    之前为了实现这个功能花了我几天的时间. 事实上.实现了之后发现也就那么回事,正所谓万事开头难嘛.. 废话不多说了.这里我使用的是JQuery控件库中的一个Autocomplete控件.即Autocom ...

  2. 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计

    前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...

  3. hdu 5038 水题 可是题意坑

    http://acm.hdu.edu.cn/showproblem.php?pid=5038 就是求个众数  这个范围小 所以一个数组存是否存在的状态即可了 可是这句话真恶心  If not all ...

  4. GIS-007-Terrain跨域访问

    方法一: 在数据服务目录中添加一个Web.config文件,文件内容是: <?xml version="1.0" encoding="UTF-8"?> ...

  5. Swift/Objective-C-Swift与Objective-C混用教程

    简介:我想很多iOS开发者在知道Swift后,心中最大的问题就是如何将Swift应用到原有项目之中.下面我将简要介绍这2种语言的混用方法,内容参考自官方文档 Using Swift with Coco ...

  6. django 自定模板标签的注册

    首先注册方法一般都是先实例化一个template.Library.如: from django import template register = template.Library() 1.注册自定 ...

  7. Bootstrap迁移系列 - Modal

    原来项目是使用2.x完成的,现在需要使用3.x进行升级. 对jQuery的依赖 请注意,所有JavaScript插件都依赖jQuery,在页面中的引入顺序可以参考基本模版. bower.json中列出 ...

  8. [数据库系列之MySQL]Mysql优化笔记

    大型网站提速之MySql优化 数据库优化包括的方面 数据库优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库提高很多. 主要包括: 1.表的设计合理 ...

  9. 记一次开发:Qt简单电话本程序

    前言 断断续续学习C++一年了,现在要做课设,觉得控制台界面实在太难看,于是用Qt做一个图形化的程序出来. 学习Qt也没有多久,只是了解了个大概,这次开发基本上是啃了2天的官方帮助文档,然后利用各种Q ...

  10. iconfont阿里爸爸做的开源图库

    iconfont 三种使用姿势 1.unicode格式 优点 兼容性最好,支持ie6+ 支持按字体的方式去动态调整图标大小,颜色等等 缺点 不支持多色图标 在不同的设备浏览器字体的渲染会略有差别,在不 ...