Ember.js 入门指南——枚举(enumerables)

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站。

在Ember中,枚举是包括若干子对象的对象,并且提供了很多的Ember.Enumerable API获取所包含的子对象。我们常见的枚举都是基于原生的javascript数组实现的,Ember扩展了其中的很多接口。

Ember提供一个标准化接口处理枚举,并且允许开发者完全改变底层数据存储,而无需修改应用程序的其他部分去访问它。

Ember的Enumerable API尽可能的遵照ECMAScript规范。为了减少与其他库不兼容Ember.js允许你使用本地浏览器实现数组。

下面是一些重用的API列表;请注意左右两列的不同。


标准方法


可被观察方法


说明


pop


popObject


该函数从从数组中删除最后项,并返回该删除项。


push


pushObject


新增元素


reverse


reverseObject


颠倒数组元素


shift


shiftObject


把数组的第一个元素从其中删除,并返回第一个元素的值


unshift


unshiftObject


可向数组的开头添加一个或更多元素,并返回新的长度。

详细文档请看:http://emberjs.com/api/classes/Ember.Enumerable.html

在列表上右侧的方法是Ember重写标准的JavaScript方法而得的,他们最大的不同之处是使用普通的方法(左边部分)操作的数组不会在你的应用程序中自动更新(不会触发观察者),而使用Ember重写过的方法则可以触发观察者,只要你的数据有变化Ember就可以观察到。

1,数组迭代器

遍历数组元素使用forEach方法。

var arr = [‘chen‘, ‘ubuntuvm‘, ‘[email protected]‘, ‘i2cao.xyz‘, ‘ubuntuvim.xyz‘];
arr.forEach(function(item, index) {
  console.log(index+1 + ", " +item);
});
2,获取数组首尾元素
//  获取头尾的元素,直接调用Ember封装好的firstObject和lastObject方法即可
console.log(‘The firstItem is ‘ + arr.get(‘firstObject‘));  // output> chen
console.log(‘The lastItem is ‘ + arr.get(‘lastObject‘));  //output> ubuntuvim.xyz
3,map方法
//  map方法,转换数组,并且可以在回调函数里添加自己的逻辑
//  map方法会新建一个数组,并且返回被转换数组的元素
var arrMap = arr.map(function(item) {
  return ‘map: ‘ + item;  //  增加自己的所需要的逻辑处理
});
arrMap.forEach(function(item, index) {
  console.log(item);
});
console.log(‘-----------------------------------------------‘);
4,mapBy方法
// mapBy 方法:返回对象属性的集合,
// 当你的数组元素是一个对象的时候,你可以根据对象的属性名获取对应值
var obj1 = Ember.Object.create({
  username: ‘123‘,
  age: 25
});
 
var obj2 = Ember.Object.create({
  username: ‘name‘,
  age: 35
});
var obj3 = Ember.Object.create({
  username: ‘user‘,
  age: 40
});
 
var obj4 = Ember.Object.create({
  age: 40
});
 
var arrObj = [obj1, obj2, obj3, obj4];  //对象数组
var tmp = arrObj.mapBy(‘username‘);  // 
 
tmp.forEach(function(item, index) {
  console.log(index+1+", "+item);
});
 
console.log(‘-----------------------------------------------‘);
5,filter方法
//  filter 过滤器方法,过滤普通数组元素
//  filter方法可以跟你指定的条件过滤掉不匹配的数据,比如下面的代码:过滤了元素大于4的元素
var nums = [1, 2, 3, 4, 5];
//  参数self值数组本身
var numsTmp = nums.filter(function(item, index, self) {
  if (item < 4)
    return true;
 
});
 
numsTmp.forEach(function(item, index) {
  console.log(‘item = ‘ + item);  //  1, 2, 3
});
console.log(‘-----------------------------------------------‘);
6,filterBy方法
//  如果你想根据对象的某个属性过滤数组你需要用filterBy方法,比如下面的代码根据isDone这个对象属性过滤
var o1 = Ember.Object.create({
  name: ‘u1‘,
  isDone: true
});
 
var o2 = Ember.Object.create({
  name: ‘u2‘,
  isDone: false
});
 
var o3 = Ember.Object.create({
  name: ‘u3‘,
  isDone: true
});
 
var o4 = Ember.Object.create({
  name: ‘u4‘,
  isDone: true
});
 
var todos = [o1, o2, o3, o4];
var isDoneArr = todos.filterBy(‘isDone‘, true);  //会把o2过滤掉
isDoneArr.forEach(function(item, index) {
  console.log(‘name = ‘ + item.get(‘name‘) + ‘, isDone = ‘ + item.get(‘isDone‘));
  // console.log(item);
});
 
console.log(‘-----------------------------------------------‘);
7,find、findBy方法
// find和findBy方法,这两个方法都是只返回第一个匹配的元素,与filter和filterBy类似,一个用于返回普通的元素,一个可以用于对象属性判断
var firstNum = nums.find(function(item, index, seft){
  return item < 4;
});
console.log(‘firstNum = ‘ + firstNum);
 
var firstObjAttr = todos.findBy(‘isDone‘, true);
console.log(‘name = ‘ + firstObjAttr.get(‘name‘) + ‘, isDone = ‘ + firstObjAttr.get(‘isDone‘));
 
console.log(‘-----------------------------------------------‘);
8,every、some方法
// every、some 方法
// every 用于判断数组的所有元素是否符合条件,如果所有元素都符合指定的判断条件则返回true,否则返回false
// some 用于判断数组的所有元素只要有一个元素符合条件就返回true,否则返回false
Person = Ember.Object.extend({
  name: null,
  isHappy: true
});
var people = [
  Person.create({ name: ‘chen‘, isHappy: true }),
  Person.create({ name: ‘ubuntuvim‘, isHappy: false }),
  Person.create({ name: ‘i2cao.xyz‘, isHappy: true }),
  Person.create({ name: ‘123‘, isHappy: false }),
  Person.create({ name: ‘ibeginner.sinaapp.com‘, isHappy: false })
];
var every = people.every(function(person, index, self) {
  if (person.get(‘isHappy‘))
    return true;
});
console.log(‘every = ‘ + every);
 
var some = people.some(function(person, index, self) {
  if (person.get(‘isHappy‘))
    return true;
});
console.log(‘some = ‘ + some);
9,isEvery、isAny方法
//  与every、some类似的方法还有isEvery、isAny 
console.log(‘isEvery = ‘ + people.isEvery(‘isHappy‘, true));  //  全部都为true,返回结果才是true
console.log(‘isAny = ‘ + people.isAny(‘isHappy‘, true));  //只要有一个为true,返回结果就是true

上述方法的条用与其他JS框架提供的方法基本相似的。学习难度不大……

时间: 2024-08-05 07:43:59

Ember.js 入门指南——枚举(enumerables)的相关文章

Ember.js 入门指南——总目录

Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,本系列教程是通过学习官网教程然后摘抄个人觉得比较重要的部分,加上学习实例整合而成,如有疏漏欢迎提出修改意见,一起成长! Ember官网:http://emberjs.com/ 教程官网:http://guides.emberjs.com/v2.0.0/ 在此简单介绍下 Ember: Ember是一个雄心勃勃的Web应用程序,消除了样板,并提供了一个标准的应用程序架构的JavaSc

Ember.js 入门指南--目录

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站. Ember.js 是什么?我想对于想学习它的人应该知道它是个什么东西,如果你想了解那就赶紧去 Google 或者百度,本系列教程是通过学习官网教程然后摘抄个人觉得比较重要的部分,加上学习实例整合而成,如有疏漏欢迎提出修改意见,一起成长! Ember官网:http://emberjs.com/ 教程官网:http://guides.emberjs.com/v2.0.0/ 在此简单介绍下 Emb

Ember.js 入门指南——属性传递

1,传递参数到组件上 每个组件都是相对独立的,因此任何组件所需的数据都需要通过组件的属性把数据传递到组件中. 比如上篇<Ember.js 入门指南--组件定义>的第三点"{{component item.pn post=item}}"就是通过属性post把数据传递到组件foo-component或者bar-component上.如果在index.hbs中是如下方式调用组件那么渲染之后的页面是空的. {{component item.pn}} 请读者自己修改index.hbs

Ember.js 入门指南——控制器(controller)

ember new chapter5_controllers cd chapter5_controllers ember server 从本篇开始进入第五章控制器,controller在Ember2.0开始越来越精简了,职责也更加单一--处理逻辑. 下面是准备工作. 从新创建一个Ember项目,仍旧使用的是Ember CLI命令创建. 在浏览器执行项目,看到如下信息说明项目搭建成功. Welcome to Ember 1,控制器简介 控制器与组件非常相似,由此,在未来的新版本中很有可能组件将会完

Ember.js 入门指南——包裹内容

准备工作: ember g route wrapping-content-in-component-route        ember g component wrapping-content-in-component 有些情况下,你需要定义一个包裹其他模板提供的数据的组件.比如下面的例子: <!--  app/templates/components/wrapping-content-in-component.hbs  -->   <h1>{{title}}</h1>

Ember.js 入门指南——异步路由

本文将为你介绍路由的高级特性,这些高级特性可以用于处理项目复杂的异步逻辑. 关于单词promises,直译是承诺,但是个人觉得还是使用原文吧.读起来顺畅点. 1,promises(承诺) Ember的路由处理异步逻辑的方式是使用promises.简而言之,promises就是一个表示最终结果的对象.这个对象可能是fulfill(成功获取最终结果)也可能是reject(获取结果失败).为了获取这个最终值,或者是处理promises失败的情况都可以使用then方法,这个方法接受两个可选的回调方法,一

Ember.js 入门指南——model简介2

本文接上一篇<Ember.js 入门指南--model简介1>. 2,核心概念 声明:下面简介内摘抄至http://www.emberjs.cn/guides/models/#toc_. 1,store store是应用存放记录的中心仓库.你可以认为store是应用的所有数据的缓存.应用的控制器和路由都可以访问这个共享的store:当它们需要显示或者修改一个记录时,首先就需要访问store. DS.Store的实例会被自动创建,并且该实例被应用中所有的对象所共享. store可以看做是一个缓存

Ember.js 入门指南——路由简介

从本文开始,将为大家介绍路由(route),如果你看过前面的<Ember.js 入门指南--{{link-to}} 助手>这篇文章应该初步了解了route.不过在这篇文章中只是简单介绍了路由是定义.路由层次,更深入的route将从本文开始逐一介绍. 当用户使用你的应用时,应用要在不同的状态之间切换.Ember提供了很多工具用于管理那些因应用规模改变而改变的状态. 讲route前先了解URL,在应用中大概会会有如下方式设置URL: 用户第一次加载应用的时: 用户手动改变URL,比如点击按钮之后跳

Ember.js 入门指南——路由定义

当你的应用启动的时候,路由器就会匹配当前的URL到你定义的路由上.然后按照定义的路由层次逐个加载数据.设置应用程序状态.渲染路由对应的模板. 1,基本路由 在app/router.js的map方法里定义的路由会映射到当前的URL.当map方法被调用的时候方法体内的route方法就会创建路由. 下面使用Ember CLI命令创建两个路由: ember generate route about ember generate route favorites 命令执行完之后你可在你的项目目录app/ro