Inheritance 如何";继承;Aurelia中的可绑定属性?

Inheritance 如何";继承;Aurelia中的可绑定属性?,inheritance,typescript,aurelia,bindable,Inheritance,Typescript,Aurelia,Bindable,我正在使用TypeScript开发一个Aurelia应用程序。在这个应用程序中,我定义了一组自定义元素,每个元素共享一组可绑定属性,这些属性被转换为css设置,如以下简化示例所示: import {computedFrom, bindable, autoinject} from 'aurelia-framework'; @autoinject export class MyCustomElement { @bindable span: number; @computedFro

我正在使用TypeScript开发一个Aurelia应用程序。在这个应用程序中,我定义了一组自定义元素,每个元素共享一组可绑定属性,这些属性被转换为css设置,如以下简化示例所示:

import {computedFrom, bindable, autoinject} from 'aurelia-framework';

@autoinject
export class MyCustomElement {
    @bindable span: number;

    @computedFrom('span')
    get width() {
        return this.span? this.span* 26 : 0;
    }

    // Leaving out a whole bunch of other code for sake of readability
}
此元素的HTML代码看起来如下所示:


因此,在自定义元素的HTML模板中,我需要多次计算属性的值

现在,其他元素也需要
span
width
属性。正如我从阅读中了解到的,可绑定属性的继承还不受支持。正如Rob Eisenberg所说的那样,我们要走的路是在这里使用构图。 但是当使用它时,我仍然需要实现
span
width
属性,但还需要通过依赖项注入导入一个组件,该组件只添加了实际计算左边距的功能。所以总的来说,这种方法仍然会产生大量的复制和粘贴代码

有没有更好的方法来解决这个问题

在twitter上@AureliaEffect发出提示后,我考虑使用自定义属性,但这仍然不会阻止我在元素上实现每个必需的属性,以便能够在元素的模板中绑定到它

关于这背后的商业案例的简短解释(又称“我为什么选择这种方法”):我的应用程序的用户能够构建电子铁路联锁系统中的轨道布局。这需要以某些通用单位(而不是像素)指定元素的宽度或偏移量。此外,需要为每个元素而不是每个元素类指定此属性


(这里还有另一个问题,一个StackOverflow解决了一个类似的主题,但在我的场景中没有一种方法:)

也许你在这个问题上看到了它,但是现在github上正在积极讨论这个问题,最终很快就会有一个PR。您可以在此处进行讨论:

感谢您通知我——尽管我也是该帖中讨论的“海绵菲克斯”;)啊!!真有趣,我没有注意到参加讨论的人的名字,哈哈。至少其他人现在可以直接链接到这个:)问题解决后,我会为这个问题写一个答案。虽然这个功能将在即将发布的Aurelia中添加,但还有另一种方法可以节省双倍的逻辑:通过装饰器添加可绑定属性。我在这里解释过: