如何在 Aurelia 中“继承”可绑定属性?

2024-02-24

我正在使用 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 代码看起来像这样:

<template>
    <div css="width: ${width}px;">
        <svg xmlns="http://www.w3.org/2000/svg" css="width: ${width}px;">
        </svg>
    </div>
</template>

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

现在其他元素也需要spanwidth财产。据我从阅读中了解到github:Aurelia 问题 #210 https://github.com/aurelia/framework/issues/210尚不支持可绑定属性的继承。正如罗布·艾森伯格所说,这里的方法是使用组合。 但是当使用它时我仍然需要实现spanwidth属性,还通过依赖注入导入一个组件,该组件仅添加实际计算左边距的功能。所以总而言之,这种方法仍然会导致大量的复制和粘贴代码。

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

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

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

(这里还有另一个问题,StackOverflow 解决了一个有点类似的主题,但方法在我的场景中不起作用:在 Aurelia 的子类上使用 @bindable 属性 https://stackoverflow.com/questions/34756883/using-the-bindable-attribute-on-child-class-in-aurelia)


也许你从那个问题开始就看到了它,但是现在 github 上正在对此进行积极的讨论,最终很快就会有 PR 出现。您可以在这里关注讨论:https://github.com/aurelia/templated/pull/507#issuecomment-297163265 https://github.com/aurelia/templating/pull/507#issuecomment-297163265

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Aurelia 中“继承”可绑定属性? 的相关文章

随机推荐

  • 如何检查 vDSP 函数在 neon 上运行的是标量还是 SIMD

    我目前正在使用 vDSP 框架中的一些函数 尤其是 vDSP conv 我想知道是否有任何方法可以检查该函数是否调用标量模式或在 neon 处理器上处理 SIMD The 文档 https developer apple com libra
  • iOS 5:设置输入类型的最小值和最大值=“日期”

    我想弄清楚如何设置一个的最小值和最大值input type date 我在网上找不到任何东西 也没有自己弄清楚 我需要设置最小值和最大值来验证年龄 我想这可能是这样的
  • 为什么没有对未使用的 let 绑定发出警告?

    C 对作为编译时常量的未使用变量发出警告 static void Main string args var unused hey CS0219 The variable unused is assigned but its value is
  • 如何在 IBM System i Access for Windows GUI Tool 中调用存储过程

    我想测试在 AS400 系统上运行的 DB2 存储过程 我安装了 IBM System i Access for Windows 并且可以针对 DB2 数据库运行 SQL 命令 我的问题是 执行接受参数并返回结果作为输出参数并将值打印到屏幕
  • 在 Node.js 中通过 ejs 使用 AJAX

    我想弄清楚如何在node js中使用ajax 我现在有这个 我如何在我的内部显示例如 order 0 name 和 order 1 name div id champ 当我按下名为 Press 的按钮时 app js var express
  • Internet Explorer 中的 RGBa

    我知道IE不支持RGBa 我还知道您可以使用以下方法 For IE 5 5 7 filter progid DXImageTransform Microsoft gradient startColorstr 99000000 endColo
  • 检查输入字段是否在普通 JavaScript 中具有焦点

    使用 jQuery 我可以测试输入字段是否具有焦点 如下所示 if is focus 不使用 jQuery 如何做到这一点 这个问题在这里得到了回答 Javascript 检测输入是否获得焦点 https stackoverflow com
  • tomcat无法建立ssl连接

    我无法与 tomcat 建立 ssl 连接 Chrome 写道 107 net ERR SSL PROTOCOL ERROR 我已经通过 keytool 生成了 mystore 文件 gt keytool genkey alias tomc
  • 使用PySpark以本地模式读取文件时出现OutOfMemoryError

    我有大约十几个 gpg 加密文件 其中包含我想使用 PySpark 分析的数据 我的策略是将解密函数作为平面映射应用到每个文件 然后在记录级别进行处理 def read fun generator filename with gpg ope
  • Android 风格签名未按预期工作

    我需要使用特定的签名配置来签署产品风格 我在 stackoverflow 上找到了一些参考资料 例如this https stackoverflow com questions 30898611 gradle signing flavors
  • MAC从shell脚本写入桌面

    有没有办法从 BASH 脚本向 MAC 桌面显示消息 我正在编写一个终端窗口脚本 需要在 MAC 桌面上显示一条消息 另外 如果这是从 BASH 脚本打开消息框的一种方法 Dennis 像这样 bin bash osascript e Te
  • 使用 thrift json 序列化将对象转换为 JSON 字符串

    我是储蓄新手 我需要将我的数据对象转换为JSON string with Thrift JSON序列化 我用这种方式尝试过 TSerializer serializer new TSerializer new TSimpleJSONProt
  • jQuery 方法:.submit() 与 .trigger('submit') 之间的区别

    jQuery 允许通过以下任一方式以编程方式触发表单提交 js form class hook submit js form class hook trigger submit 注 我的理解是 trigger submit is to su
  • C# == 运算符详细做什么?

    在 C 中 当您在两个对象上使用 运算符进行比较时 后台到底发生了什么 它只是比较地址吗 或者是类似 Equals 或 CompareTo 的东西吗 PS java中的 运算符怎么样 它的行为相同吗 据我所知 它按值 相等 比较值类型 它通
  • Clojure:如何在运行时找出函数的数量?

    给定一个函数对象或名称 我如何确定它的数量 就像是 arity func name 我希望有办法 因为 arity 在 Clojure 中非常重要 函数的元数存储在变量的元数据中 arglists meta str x x ys 这要求该函
  • Lisp 中的函数名可以有别名吗?

    就像包裹一样 我使用Emacs 也许 它可以提供某种解决方案 例如 defun the very very long but good name 稍后在代码中没有用处 但名字就像Fn 15或者第一个字母缩写也没有用 是否可以使用类似于包的别
  • Java 静态方法上的线程锁

    根据我对 Java 类的了解 非静态同步方法 在特定对象上获取锁 静态同步方法 在类上获取锁 我对此有点困惑 因为我们可以通过类名或对象名调用静态方法 请假设我的类有 4 个方法都是同步的 2 个方法是静态的 2 个方法不是静态的 如果我创
  • Jquery 在 Href 上创建双击事件

    伙计们是否可以使用 jquery 为 a href 创建双击事件 双击锚点执行操作的问题是 页面将在第一次单击时重定向 从而阻止双击及时响应 如果您想 拦截 点击事件 以便双击事件有机会在页面重定向之前触发 那么您可能必须设置点击超时 如下
  • 如何在 Django 中获取用户 IP 地址?

    如何在 Django 中获取用户的 IP 我有这样的看法 Create your views from django contrib gis utils import GeoIP from django template import Re
  • 如何在 Aurelia 中“继承”可绑定属性?

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