Ember.js 入門指南——枚舉(enumerables)

本系列文章全部從(http://ibeginner.sinaapp.com/)遷移過來,歡迎訪問原網站。


Ember中,枚舉是包括若干子對象的對象,並且提供了很多的Ember.Enumerable API獲取所包含的子對象。我們常見的枚舉都是基於原生的javascript數組實現的,Ember擴展了其中的很多接口。

 Ember提供一個標準化接口處理枚舉,並且允許開發者完全改變底層數據存儲,而無需修改應用程序的其他部分去訪問它。

EmberEnumerable 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
3map方法
//  map方法,轉換數組,並且可以在回調函數裏添加自己的邏輯
//  map方法會新建一個數組,並且返回被轉換數組的元素
var arrMap = arr.map(function(item) {
  return 'map: ' + item;  //  增加自己的所需要的邏輯處理
});
arrMap.forEach(function(item, index) {
  console.log(item);
});
console.log('-----------------------------------------------');
4mapBy方法
// 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('-----------------------------------------------');
5filter方法
//  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('-----------------------------------------------');
6filterBy方法
//  如果你想根據對象的某個屬性過濾數組你需要用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('-----------------------------------------------');
7findfindBy方法
// 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('-----------------------------------------------');
8everysome方法
// 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);
9isEveryisAny方法
//  與every、some類似的方法還有isEvery、isAny 
console.log('isEvery = ' + people.isEvery('isHappy', true));  //  全部都爲true,返回結果纔是true
console.log('isAny = ' + people.isAny('isHappy', true));  //只要有一個爲true,返回結果就是true

    上述方法的條用與其他JS框架提供的方法基本相似的。學習難度不大……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章