ember.js - babel is exporting "this" as undefined in ember computed property -
using ember-cli@0.2.7
, emberjs@1.13.2
.
source emberjs model
export default ds.model.extend({ name: ds.attr('string'), displayname : ember.computed('name', () => { return this.get('name'); }) });
translated model
'use strict'; var _this = undefined; exports['default'] = ds['default'].model.extend({ name: ds['default'].attr('string'), displayname: ember.computed('name', function () { return _this.get('name'); //at point _this undefined }) });
the trouble _this never set the model. why case?
babel exporting undefined because context preserving using fat arrow function undefined.
there no difference between have @ moment , following:
let options = { name: ds.attr('string'), displayname : ember.computed('name', () => { return this.get('name'); }) }; console.log(this); // undefined export default ds.model.extend(options);
the context in case undefined. passing options ds.model
object not exist yet.
export default ds.model.extend({ name: ds.attr('string'), displayname : ember.computed('name', function() { return this.get('name'); }) });
on unrelated note, since you're using ember let's make use of es6 destructuring make code 'nicer':
import ember 'ember'; import ds 'ember-data'; const { computed } = ember; const { attr, model } = ds; export default model.extend({ name: attr('string'), displayname : computed('name', function() { return this.get('name'); }) });
Comments
Post a Comment