2015-08-24 30 views
1

在餘燼V2.0.0指南,章 「對象模型」,部分 「計算屬性」:Ember.computed(V2.0.0):獲得(鍵),設置(鍵,值)

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); 
    } 
    }) 
}); 

請幫我理解「get(key)」,「set(key,value)」和「var [firstName,lastName] = ...」的構造。

新的ES6和/或Ember功能?

+1

它只是一個具有兩個函數的散列,一個'get'和'set'函數。 'get(key)'等價於'get:function(key)'。這是ES6的東西。 – Kingpin2k

+0

拆分也是ES6的一部分:http://www.ecma-international.org/ecma-262/6.0/#sec-destructuring-assignment http://stackoverflow.com/questions/3522406/javascript-split-字符串直接到變量 – Kingpin2k

+1

'get'和'set'只是函數。它與ES6沒有任何關係。 –

回答

3

get(key), set(key, value)只是Ember.js中新計算屬性語法的方法簽名。所以,如果你在寫Ember.js計算屬性,你需要實現這兩種方法,並通過他們爲對象Ember.computed方法,例如:

myComputedProperty: Ember.computed('propertyToDependOn', { 

    get() { // <= function, equal to - get: function() { 
    // ... 
    }, 

    set(key, value) { <= function 
    // ... 
    } 

}) 

var [ firstName, lastName ] = value.split(/\s+/);是例如解構它匹配列表分配。這是ES2015規範的一部分。 You can read more about ES2015 on Babel website. Babel是Ember CLI中使用的JavaScript框架,爲開發人員提供了使用新的JavaScript語法和功能的能力。

+0

我是JS新手,Ember.js,特別是Babel/ES6。因此,非常感謝Daniel對你的回答。 我現在意識到在Ember版本1.12中引入了用於計算屬性的新的離散的getter和setter語法。我很驚訝沒有發現任何關於Ember.computed在Ember API中的getter和setter?或者我錯了? 我也被2.0.0版本中的一些文本弄糊塗了。指導和教程:「...所以如果你想使用一個計算屬性作爲setter,你需要檢查參數的數量來確定它是否被調用作爲一個getter或setter「 –

+0

那麼,http://emberjs.com/api/classes/Ember.computed.html肯定是過時的,但在這裏 - http://guides.emberjs.com/v2.0.0/object- model/computed-properties /#toc_setting-computed-properties - 你可以找到提到的這個方法。你提到的這段文字 - 「...所以如果你想使用一個計算屬性作爲setter,你需要檢查參數的數量來確定它是否被調用爲getter或setter」 - 我認爲它是過去。不再需要這樣做。在計算新的計算屬性語法之前,需要檢查參數的數量,但現在不需要。 –