我目前正在尝试开发一些EmberJs + TypeScript原型。我正在使用这个tutorial,我坚持这个point。我应该如何在TypeScript中创建计算属性?
我尝试过类似的东西,但它不起作用:
module App {
export class TodoController extends Em.ObjectController {
constructor() {
super();
}
public isCompleted = ((key, value) => {
var model = this.get('model');
if (value === undefined) {
// property being used as a getter
return model.get('isCompleted');
} else {
// property being used as a setter
model.set('isCompleted', value);
//model.save();
return value;
}
}).property('model.isCompleted');
}
}
答案 0 :(得分:1)
您不能使用typescript类语法来扩展Ember类。您必须像在普通Javascript中一样使用extend
方法。原因在于Ember不仅仅扩展了类的原型(正如您从计算属性中看到的那样无效)。
如果你真的想使用类语法,我建议使用为Ember构建的EmberScript或SweetJS来构建一个宏来实现它。不幸的是,两种方法都不适用于Typescript。
或者,如果您感觉特别聪明,可以修改Typescript生成的__extends
方法,并可能实现您想要的方式。
但是对于一些语法糖而言似乎都有点过分。只需使用Ember提供的extend
方法。