2015-02-08 75 views
1

試圖將ES6用於我所有的Ember工作。我有以下ES6語法問題:如何使用ES6在Ember中聲明可觀察性或計算的屬性?

如何將標準ES5對象字面值計算屬性轉換爲ES6語法?

ES5:

export default Ember.Controller.extend({ 
    foo: function() { 
     return "bar"; 
    }.property() 
    }); 

ES6:

export default Ember.Controller.extend({ 
    foo() { 
    return "bar" 
}.property() 
}); 

我到目前爲止似乎什麼都沒有工作,因爲.property不正確引用。這是如何實現的?

+0

也許你可以使用它們而不原型擴展HTTP://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/#toc_functions – Altrim 2015-02-08 21:02:14

+0

@ altrim我也注意到使用內聯方法 – leojh 2015-02-09 04:36:33

回答

4

ES6僅在類內部支持該語法。我不確定Ember是以一種與標準JavaScript一起使用的方式公開它的類系統。

我強烈建議不要使用原型擴展。也就是說,你總是這樣做:

foo: Ember.computed('bar', function() { 
    return this.get('bar'); 
}) 

它對我來說讀得好多了。

+0

請注意,方法語法同樣適用於對象文字,而不僅僅在類中。 – Bergi 2015-06-24 04:35:44

2

下似乎與Ember 1.13的工作:

export default class extends Ember.Controller { 
    constructor(...args) { 
    super(...args); 

    this.foo = Ember.computed('bar', function() { 
     return this.get('bar'); 
    }); 
    } 
} 

通知「出口默認類」和定義構造函數中的功能的有點煩方面。

你也可以分割函數定義:

export default class extends Ember.Controller { 
    constructor(...args) { 
    super(...args); 

    this.foo = Ember.computed('bar', this.foo); 
    } 

    foo() { 
    return this.get('bar'); 
    } 
} 

但你有分裂與功能本身的函數的計算性質的缺點。

如果人們擁有它們,我很樂意聽到其他的想法,因爲我更喜歡定義類的ES6風格。

0

有了新的getter語法:

foo: Ember.computed('bar', { 
    get() { 
    return this.get('bar'); 
    } 
}) 
相關問題