课程表

Ember.js 基础

Ember.js 对象模型

Ember.js handlebars模板

Ember.js 路由

Ember.js 组件

Ember.js 控制器

Ember.js 模型

Ember.js 测试

工具箱
速查手册

Ember 枚举

当前位置:免费教程 » JS/JS库/框架 » Ember.js

Ember中,枚举是包含多个子对象的对象,并且提供了丰富的API(Ember.Enumerable API)去获取所包含的子对象。Ember的枚举都是基于原生的javascript数组实现的,Ember扩展了其中的很多接口。 Ember提供一个标准化接口处理枚举,并且允许开发者完全改变底层数据存储,而无需修改应用程序的数据访问代码。 EmberEnumerable API尽可能的遵照ECMAScript规范。为了减少与其他库不兼容,Ember允许你使用本地浏览器实现数组。

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

标准方法 可被观察方法 说明
pop popObject 该函数从从数组中删除最后项,并返回该删除项
push pushObject 新增元素
reverse reverseObject 颠倒数组元素
shift shiftObject 把数组的第一个元素从其中删除,并返回第一个元素的值
unshift unshiftObject 可向数组的开头添加一个或更多元素,并返回新的长度

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

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

常用API

1,数组迭代器

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

  1. var arr = ['chen', 'ubuntuvm', '1527254027@qq.com', 'i2cao.xyz', 'ubuntuvim.xyz'];
  2. arr.forEach(function(item, index) {
  3. console.log(index+1 + ", " +item);
  4. });

2,获取数组首尾元素

  1. // 获取头尾的元素,直接调用Ember封装好的firstObject和lastObject方法即可
  2. console.log('The firstItem is ' + arr.get('firstObject')); // output> chen
  3. console.log('The lastItem is ' + arr.get('lastObject')); //output> ubuntuvim.xyz

3,map方法

  1. // map方法,转换数组,并且可以在回调函数里添加自己的逻辑
  2. // map方法会新建一个数组,并且返回被转换数组的元素
  3. var arrMap = arr.map(function(item) {
  4. return 'map: ' + item; // 增加自己的所需要的逻辑处理
  5. });
  6. arrMap.forEach(function(item, index) {
  7. console.log(item);
  8. });
  9. console.log('-----------------------------------------------');

4,mapBy方法

  1. // mapBy 方法:返回对象属性的集合,
  2. // 当你的数组元素是一个对象的时候,你可以根据对象的属性名获取对应值
  3. var obj1 = Ember.Object.create({
  4. username: '123',
  5. age: 25
  6. });
  7.  
  8. var obj2 = Ember.Object.create({
  9. username: 'name',
  10. age: 35
  11. });
  12. var obj3 = Ember.Object.create({
  13. username: 'user',
  14. age: 40
  15. });
  16.  
  17. var obj4 = Ember.Object.create({
  18. age: 40
  19. });
  20.  
  21. var arrObj = [obj1, obj2, obj3, obj4]; //对象数组
  22. var tmp = arrObj.mapBy('username'); //
  23.  
  24. tmp.forEach(function(item, index) {
  25. console.log(index+1+", "+item);
  26. });
  27.  
  28. console.log('-----------------------------------------------');

5,filter方法

  1. // filter 过滤器方法,过滤普通数组元素
  2. // filter方法可以跟你指定的条件过滤掉不匹配的数据,比如下面的代码:过滤了元素大于4的元素
  3. var nums = [1, 2, 3, 4, 5];
  4. // 参数self值数组本身
  5. var numsTmp = nums.filter(function(item, index, self) {
  6. return item < 4;
  7. });
  8.  
  9. numsTmp.forEach(function(item, index) {
  10. console.log('item = ' + item); // 1, 2, 3
  11. });
  12. console.log('-----------------------------------------------');

filter方法会返回所有判断为true的元素,会把判断结果为false或者undefined的元素过滤掉。

6,filterBy方法

  1. // 如果你想根据对象的某个属性过滤数组你需要用filterBy方法,比如下面的代码根据isDone这个对象属性过滤
  2. var o1 = Ember.Object.create({
  3. name: 'u1',
  4. isDone: true
  5. });
  6.  
  7. var o2 = Ember.Object.create({
  8. name: 'u2',
  9. isDone: false
  10. });
  11.  
  12. var o3 = Ember.Object.create({
  13. name: 'u3',
  14. isDone: true
  15. });
  16.  
  17. var o4 = Ember.Object.create({
  18. name: 'u4',
  19. isDone: true
  20. });
  21.  
  22. var todos = [o1, o2, o3, o4];
  23. var isDoneArr = todos.filterBy('isDone', true); //会把o2过滤掉
  24. isDoneArr.forEach(function(item, index) {
  25. console.log('name = ' + item.get('name') + ', isDone = ' + item.get('isDone'));
  26. // console.log(item);
  27. });
  28.  
  29. console.log('-----------------------------------------------');

filterfilterBy不同的地方是前者可以自定义过滤逻辑,后者可以直接使用。

7,every、some方法

  1. // every、some 方法
  2. // every 用于判断数组的所有元素是否符合条件,如果所有元素都符合指定的判断条件则返回true,否则返回false
  3. // some 用于判断数组的所有元素只要有一个元素符合条件就返回true,否则返回false
  4. Person = Ember.Object.extend({
  5. name: null,
  6. isHappy: true
  7. });
  8. var people = [
  9. Person.create({ name: 'chen', isHappy: true }),
  10. Person.create({ name: 'ubuntuvim', isHappy: false }),
  11. Person.create({ name: 'i2cao.xyz', isHappy: true }),
  12. Person.create({ name: '123', isHappy: false }),
  13. Person.create({ name: 'ibeginner.sinaapp.com', isHappy: false })
  14. ];
  15. var every = people.every(function(person, index, self) {
  16. if (person.get('isHappy'))
  17. return true;
  18. });
  19. console.log('every = ' + every);
  20.  
  21. var some = people.some(function(person, index, self) {
  22. if (person.get('isHappy'))
  23. return true;
  24. });
  25. console.log('some = ' + some);

8,isEvery、isAny方法

  1. // 与every、some类似的方法还有isEvery、isAny
  2. console.log('isEvery = ' + people.isEvery('isHappy', true)); // 全部都为true,返回结果才是true
  3. console.log('isAny = ' + people.isAny('isHappy', true)); //只要有一个为true,返回结果就是true

上述方法的使用与普通JavaScript提供的方法基本一致。学习难度不大……自己敲两边就懂了!

这些方法非常重要,请一定要学会如何使用!!!

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号