2015-02-08 72 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'); 
    } 
}) 
相关问题