2.1 The Object Model -- Classes and Instances(类和实例)
一、Defining Classes(定义类)
1. 定义一个新的Ember类,调用Ember.Object上的extend()方法:
example:定义了一个含有say()方法的新的Person类。
Person = Ember.Object.extend({
say(thing) {
alert(thing);
}
});
2. 你也可以通过调用任何存在的class的extend()方法创建一个subclass。
example:你想创建一个Ember的内置Ember.Component类的子类
app/views/person.js
PersonView = Ember.Component.extend({
tagName: 'li',
classNameBindings: ['isAdministrator']
});
3. 当你定义一个子类时,你可以重写父类的方法,但是你仍然可以通过调用_super()方法获取父类的实现。
Person = Ember.Object.extend({
say(thing) {
var name = this.get('name');
alert(name + " says: " + thing);
}
});
Soldier = Person.extend({
say(thing) {
this._super(thing + ", sir!");
}
});
var yehuda = Soldier.create({
name: "Yehuada Katz"
});
yehuda.say("Yes"); //alerts "Yehuada Katz says: Yes, sir!"
二、Creating Instances(创建实例)
1. 一旦你定义了一个类,你可以通过调用它的create()方法来创建新实例。对这个实例来说,任何你定义的在该类上的方法,属性和可计算的属性都是可用的。
var person = Person.create();
person.say("Hello");//alerts " says: Hello"
2. 当你创建一个实例,你可以通过给create()方法传递一个可选的hash初始化它的属性的值。
Person = Ember.Object.extend({
helloWorld() {
alert("Hi, my name is " + this.get('name'));
}
});
var tom = Person.create({
name: "Tom Dale"
});
tom.helloWorld();//alerts "Hi, my name is Tom Dale"
3. 处于性能原因,注意当调用create()时不能重新定义一个实例的计算属性和方法,或者定义一个新的。应该只设置简单属性时调用create()。如果你需要定义或者重定义方法或者计算属性,创建一个新的subclass并实现它。
4. 按照惯例,保存类的属性或者变量名是Pascal命名法,但是类的实例不是这样。例如,变量Person会指向一个类,然而person会指向一个实例(通常是Person类)。在你的Ember应用程序中,你应该坚持这些命名规则。
三、Initializing Instances(初始化实例)
1. 当一个新的实例被创建,它的init方法被自动调用。这是理想的地方来设置所需的新实例:
Person = Ember.Object.extend({
init() {
var name = this.get('name');
alert(name + ", reporting for duty!");
}
});
Person.create({
name: "Stefan Penner"
});
//alerts "Stefan Penner, reporting for duty!"
2. 如果你是子类化一个框架内部的类,例如Ember.Component,你重写init方法,确保你调用this._super()!如果你没有这样做,系统可能没有机会去做重要的设置工作,在你的应用程序中你将会看到奇怪的行为。
四、Accessing Object Properties(访问对象属性)
当你访问一个对象的属性时,使用get和set访问器方法:
var person = Person.create();
var name = person.get('name');
person.set('name', "Tobias Funke");
请确保使用这些访问器方法,否则,计算属性不会重新计算,观察者不会触发,模板不会更新。
2.1 The Object Model -- Classes and Instances(类和实例)的更多相关文章
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- python's object model
[python's object model] 1.object.__init__(self[, ...]) 如果subclass没有实现__init__,那么python类在实例化的时 ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- selenium page object model
Page Object Model (POM) & Page Factory in Selenium: Ultimate Guide 来源:http://www.guru99.com/page ...
- POM(project Object Model) Maven包管理依赖 pom.xml文件
什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法 ...
- [转]The Regular Expression Object Model
本文转自:https://docs.microsoft.com/en-us/dotnet/standard/base-types/the-regular-expression-object-model ...
- Component Object Model (COM) 是什么?
本文主要介绍 COM 的基础知识,倾向于理论性的理解,面向初学者,浅尝辄止. 1. COM 是什么: COM 的英文全称是,Component Object Model,中文译为,组件对象模型.它官方 ...
- Selenium的PO模式(Page Object Model)[python版]
Page Object Model 简称POM 普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...
- 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况
自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...
随机推荐
- C#读取Excel日期时间
//如果为20171219 if (dt.Rows[i][title].ToString().Trim().Length == 8) { realDate = dt.Rows[i][title].To ...
- SQLServer------聚集索引和非聚集索引的区别
转载: http://www.cnblogs.com/flashicp/archive/2007/05/08/739245.html 建立非聚集索引(vid不是主键) create index idx ...
- zoj 1022 - Parallel Expectations
题目:有两个指令序列,在执行时,能够执行随意指令序列的下一条指令.每条指令要一直执行到结束. 求两组指令执行结束后,每一个变量里面存储值的期望. 分析:dp,模拟.这道题算不上难题,只是算得上的麻烦题 ...
- python2.0_s12_day9_协程&多线程和cpu,磁盘io之间的关系
事件驱动和异步io有什么直接关系. 当我们访问一个网页,不考虑网络问题.我们人类不觉得网页慢. 但是实际中对计算机来说还是慢.那慢在哪里.io io操作是整个网络操作中最慢的.比如你打开网页要是有2秒 ...
- PyQt4消息窗口
默认情况下,如果我们单击了窗口标题栏上的X标记,窗口就会被关闭.但是有些时候我们想要改变这一默认行为.比如,我们正在编辑的文件内容发生了变化,这时若单击X标记关闭窗口,编辑器就应当但出确认窗口. #! ...
- Android App签名打包 与 SDK开发文档
Android App签名打包签名的意义1.为了保证每个程序开发者的合法权益2.放置部分人通过使用相同的Package Name来混淆替换已经安装的程序,从而出现一些恶意篡改3.保证我们每次发布的版本 ...
- Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
有两张表, 一张为爱好表b表 一张为用户表 u表 u表 id 名称 爱好Id 1 张三 1,2,3,4 2 李四 2,5 b表 id 名称 1 打乒乓 2 ...
- Docker源码分析(三):Docker Daemon启动
1 前言 Docker诞生以来,便引领了轻量级虚拟化容器领域的技术热潮.在这一潮流下,Google.IBM.Redhat等业界翘楚纷纷加入Docker阵营.虽然目前Docker仍然主要基于Linux平 ...
- 【Java nio】java nio笔记
缓冲区操作:缓冲区,以及缓冲区如何工作,是所有I/O的基础.所谓“输入/输出”讲的无非就是把数据移出货移进缓冲区.进程执行I/O操作,归纳起来也就是向操作系统发出请求,让它要么把缓冲区里的数据排干,要 ...
- Shell主要逻辑源码级分析(1)——SHELL运行流程
版权声明:本文由李航原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/109 来源:腾云阁 https://www.qclou ...