Aurelia计算属性与ES5

问题描述:

我正在通过Aurelia教程,但故意只使用ES5和AMD/RequireJS,因为最初我试图减少我可能需要在我当前的生产应用程序中引入的技术超载(这是目前正在使用Angular,但我正在考虑交换到Aurelia而不是Angular 2),但我坚持让计算属性起作用。Aurelia计算属性与ES5

我注意到一个update made in April删除从允许以下语法的对象原型的计算功能,但我不知道我应该做的,而不是语法如下的内容:

Welcome.computed({ 
    fullName : function() { return this.firstName + " " + this.lastName; } 
}); 

我能做到与以下相同的效果,但看起来非常冗长,因为取得了什么成就!有没有一个正确的Aurelia方式?

Object.defineProperty(
    Welcome.prototype, 
    "fullName", 
    { 
    get: function() { return this.firstName + " " + this.lastName }, 
    enumerable: true 
    }); 

你在做什么是正确─因为写这些额外的ES5代码可能变得单调而乏味,你总是可以重新添加计算的工厂方法。

我还建议指定计算属性的依赖关系来优化数据绑定效率。这下面的代码片段是等价的:

ES5:

function fullName() { return this.firstName + ' ' + this.lastName } 
fullName.dependencies = ['firstName', 'lastName']; 
Object.defineProperty(
    Welcome.prototype, 
    'fullName', 
    { 
    get: fullName, 
    enumerable: true 
    }); 

ES6/ES7:

@computedFrom('firstName', 'lastName') 
get fullName() { 
    return `${this.firstName} ${this.lastName}`; 
} 

http://aurelia.io/docs.html#adaptive-binding

+0

感谢您的......这正是我希望听到的!是的,我完全同意你,我应该为此创建自己的工厂(让我想知道为什么它被拿出来了!)感谢您的帮助:) – Phil