一、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. C++第15周(春)项目3 - OOP版电子词典(二)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...

  2. Dubbo(四) -- telnet命令

    一.telnet的作用 当dubbo服务(即生产者)发布之后,我们可以通过telnet命令来来进行调试和管理,以及跟踪服务调用的次数. 注意:2.0.5以上版本服务提供端口支持telnet命令,协议一 ...

  3. hex()

    hex() 用于将十进制数字转换成十六进制 In [1]: hex(10) Out[1]: '0xa' In [2]: hex(11) Out[2]: '0xb'

  4. oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库

    我从源库导出数据PCK报错如下:

  5. with revoked permission android.permission.CAMERA

    1,刚出现这样的问题我是直接把 CAMERA 移除掉 2.第一步判断时候授权. if (Build.VERSION.SDK_INT >= 23) { int checkCallPhonePerm ...

  6. javascript中五种基本数据类型

    前言: JavaScript中有五种基本数据类型(也叫做简单数据类型)分别为:undefined.null.bolean.number.string:另外还含有一种复杂的数据类型:object. 深入 ...

  7. 使用area标签实现标签的嵌套

    在项目中我们会碰到这种需求:即点击这个整个a标签跳转到一个页面,点击a里面的某个a再跳转到另一个页面.有人会说,这还不简单,直接a标签嵌套a标签,可是事实如此吗,看代码: <a href=&qu ...

  8. 【PHP】算法: 获取满足给定值的最优组合

    PHP 获取给定值的最优组合 方法 -   (蓝洛提供,博客地址: www.zhaorui.info) <?php ini_set('error_reporting','E_ALL^E_NOTI ...

  9. 【BZOJ1269/1507】[AHOI2006]文本编辑器editor Splay

    [BZOJ1269][AHOI2006]文本编辑器editor Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目 ...

  10. 关于Properties的用法的详细解释

    如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的.(如清单 1 所示).最近更新的java.util.Properti ...