2015-02-08 1 views
1

Попытка использования ES6 для всех моих работ Ember. У меня есть следующая проблема синтаксиса ES6:Как объявить наблюдаемые или вычисляемые свойства в Ember с помощью ES6?

Как преобразовать стандартное вычисляемое свойство объектного объекта 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

+0

@ altrim Я также заметил, используя методы inline – leojh

ответ

4

ES6 поддерживает этот синтаксис только внутри класса. Я не уверен, что Ember предоставляет свою систему классов таким образом, чтобы работать со стандартным JavaScript.

Я настоятельно рекомендую не использовать прототипы. То есть вы всегда будете делать это:

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

Это читается намного лучше для меня.

+0

Обратите внимание, что синтаксис метода работает и в объектных литералах не только в классах. – Bergi

2

Следующая, кажется, работает с Эмбер 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

С новым геттерного синтаксисом:

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