在 Aurelia 中,我可以绑定包含视图模型中的函数以供自定义元素调用吗?

2024-04-23

我有一个自定义元素,它将接受用户输入,并且在单击[保存]按钮时,我想将信息传递给父视图模型,以便我可以将其发送到服务器并移至下一部分。例如,我将简化这一点:

my-element.js:

import { customElement, bindable } from 'aurelia-framework';

@customElement('my-element')
@bindable('save')
export class MyElement { }

my-element.html:

<template>
    <button click.delegate="save()">Click this</button>
</template>

parent-view-model.js:

export class ParentViewModel {
  parentProperty = 7;
  parentMethod() {
    console.log(`parent property: ${this.parentProperty}`);
  }
}

parent-view-model.html:

<template>
    <require from="./my-element"></require>
    <div class="content-panel">
        <my-element save.bind="parentMethod"></my-element>
    </div>
</template>

有关演示,请参阅(app.js 和 app.html 分别代表parent-view-model.js 和parent-view-model.html):

https://gist.run/?id=96b203e9ca03b62dfb202626c2202989 https://gist.run/?id=96b203e9ca03b62dfb202626c2202989

有用!有点儿。很遗憾,this似乎必然my-element代替parent-view-model,所以在这个例子中,打印到控制台的内容是:parent property: undefined。这是行不通的。

我知道我可以利用 EventAggregator 来促进自定义元素和视图模型之间的一些通信,但如果我可以帮助它,我希望避免增加复杂性。


为此,您有两种选择。您可以使用自定义事件来处理此问题,也可以使用callAnj 在他的回答中提到的绑定。您使用哪一种取决于您的实际用例。

如果您希望自定义元素能够调用父虚拟机上的方法并传递数据out的自定义元素,那么您应该使用自定义事件,如下要点所示:https://gist.run/?id=ec8b3b11f4aa4232455605e2ce62872c https://gist.run/?id=ec8b3b11f4aa4232455605e2ce62872c:

应用程序.html:

<template>
    <require from="./my-element"></require>
    <div class="content-panel">
        <my-element save.delegate="parentMethod($event)"></my-element>
    </div>

    parentProperty = '${parentProperty}'
</template>

app.js:

export class App {
  parentProperty = 7;
  parentMethod($event) {
    this.parentProperty = $event.detail;
  }
}

我的元素.html:

<template>
    <input type="text" value.bind="eventDetailValue" />
    <button click.delegate="save()">Click this</button>
</template>

我的元素.js:

import { inject, customElement, bindable } from 'aurelia-framework';

@customElement('my-element')
@inject(Element)
export class MyElement {
  eventDetailValue = 'Hello';

  constructor(element) {
    this.element = element;
  }

  save() {
    var event = new CustomEvent('save', { 
      detail: this.eventDetailValue,
      bubbles: true
    });

    this.element.dispatchEvent(event);
  }
} 

您基本上会附加需要传递的任何数据detail自定义事件的属性。在事件绑定声明中,您将添加$event作为函数的参数,然后检查detail事件处理程序中 $event 的属性(您也可以只传递$event.detail如果你愿意的话)。

如果您希望自定义元素能够调用父虚拟机上的方法并从父虚拟机(或从另一个自定义元素或其他元素)传入数据,那么您应该使用call捆绑。您可以通过在绑定声明中指定参数来指定将传递给方法的参数(foo.call="myMethod(myProperty)"。这些参数来自声明绑定的 VM 上下文,而不是来自自定义元素的 VM。

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

在 Aurelia 中,我可以绑定包含视图模型中的函数以供自定义元素调用吗? 的相关文章

  • 如何使用 Node.js 在 Firebase 中注册用户?

    PROBLEM 0 用户是在 Firebase 的身份验证系统中创建的 我在 身份验证 选项卡中看到它 1 但没有对数据库进行任何更改 2 页面似乎无限加载 3 控制台仅记录 Started 1 CODE router post regis
  • 在 ExpressJS 中通过管道传送远程文件

    我想读取远程图像并显示它 我可以保存文件 但无法正确显示代码 理想情况下 我只想直接传递文件而不进行处理 不确定是否需要 tmp 文件步骤 此代码不显示任何内容 没有错误 我也尝试了 res pipe response var url ht
  • Javascript Firefox - 如果 @import 存在于样式表中,则无法查询 cssRules - bug 或预期行为?

    如果 import 存在于 css 样式表中 我无法查询 cssRules 是否符合网络标准 或者知道 Firefox 的限制 注意 我正在从同一域导入 css 文件 var style rules document styleSheets
  • 为具有可变内容的内联块元素提供相同的高度?

    我有 4 个宽度固定但内容可变的内联块元素 并且我希望所有这些元素具有相同的高度 最大元素的高度 请参见这个jsfiddle http jsfiddle net kKZXj 我应该如何实现这个目标 如果仅使用 css 无法做到这一点 那么使
  • 运行 npm install 时出错 Error: 404 Not Found: 7zip-bin@~4.1.0

    当我运行 npm install 时 我看到此错误 3 verbose stack Error 404 Not Found 7zip bin 4 1 0 2293 verbose stack at fetch then res C cygw
  • 在 HTML SELECT 标记中禁用键盘

    我想禁用 HTML SELECT 标记的键盘 以便用户只能使用鼠标来选择选项 我试过了event cancelBubble true on the onkeydown onkeyup and onkeypress没有运气的事件 有任何想法吗
  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • Jquery 动画与 CSS 浮动

    我的代码有问题 宽度似乎可以工作 但浮动没有 这里是 这是一个例子 http jsfiddle net v82ck http jsfiddle net v82ck 问题 悬停时菜单上的浮动属性不会改变 我希望每个菜单元素下方的线在悬停该菜单
  • Atom“自动完成”不起作用

    因此 当您安装 Atom 时 autocomplete 会随其一起提供 并且默认情况下处于启用状态 当我编写代码时 什么也没有显示 为什么 是否需要配置任何文件才能正常工作 In autocomplete plus settings pag
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 通过单击字段启用非活动字段

    是否可以有一组非活动字段 如果单击其中一个字段 则某些字段将变为必填字段并运行某些代码段 举例来说 您显示了三个字段
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • RxJS - 从可观察对象中获取最后 n 个元素

    我想从可观察对象中获取最后 3 个元素 假设我的时间线是这样的 a b c d e f g h i j gt where a b c d e f g h i j are emitted values 每当发出新值时 我想立即获取它 因此它可
  • 日期时间的自定义 JavaScriptConverter?

    我有一个对象 它有一个 DateTime 属性 我想通过 AJAX JSON 将该对象从 ashx 处理程序传递回网页 我不想使用第 3 方控件 当我这样做时 new JavaScriptSerializer Serialize DateT
  • 替换 Javascript 中的引号?

    对于我正在制作的网络应用程序 我将收到文本字符串 其中偶尔包含引号 因为我接下来要 document writing 字符串 所以需要将它们更改为撇号或转义 我该怎么做 因为当我尝试时它似乎不起作用 特别是我认为因为字符串的引号阻止了脚本的
  • 为什么严格模式下不允许使用八进制数字文字(解决方法是什么?)

    为什么八进制数字文字不允许JavaScript 严格模式 https developer mozilla org en docs Web JavaScript Reference Strict mode 有什么害处呢 use strict
  • Safari 的 Javascript 与 document.write 的问题

    我的问题只发生在 Safari 上 IE FF Chrome 和 Opera 都可以完美运行 我正在向 DOM 添加一个对象 与 YouTube 的方式完全相同 具体取决于 ActiveX 或 NPAPI 因此在确定写入对象类型后 我通过以
  • 垃圾收集器不适用于 NodeJS / Chrome 中的类型化数组

    我最初将其记录为原项目中的一个问题 https github com nodejs help issues 3590 它立即转移到帮助主题 没有很好的解释 所以现在我想在这里提问 如果我们在 NodeJS v14 v16 v17 中运行以下

随机推荐

  • MongoDB 空字符串值与 null 值

    在 MongoDB 生产中 如果某个键的值为空或未提供 可选 我应该使用空字符串值还是应该使用 null 作为值 1 使用空字符串与空字符串之间有什么优缺点吗 2 如果我将值设置为 undefined 以从现有文档中删除属性 与让属性值设置
  • 如何确定 iPhone 正在使用/解锁

    我面临的要求之一是需要检测用户是否正在使用 iPhone 即使我的应用程序也在后台 到目前为止 我找到了以下出路 但没有一个指向解锁机制 applicationProtectedDataWillBecomeUnavailable 这将告诉用
  • 当计算机通过组策略锁定时,C# SessionSwitchReason.SessionLock 不会触发

    编辑 这里的问题不是它是通过 GP 锁定的 而是它是在服务帐户下作为服务运行的 并且它无权访问交互式桌面 我有一个 C 应用程序 需要检查用户会话何时被锁定 我正在使用Microsoft Win32 SystemEvents Session
  • Java EE 身份验证:如何捕获登录事件?

    给定为 Java Web 应用程序定义的 FORM 类型的身份验证机制 如何捕获已执行登录在重定向到请求的资源之前发生事件 是否有任何类型的侦听器可以让我在用户登录时执行我的代码 我觉得定义过滤器不是最好的解决方案 因为过滤器链接到资源 即
  • PHP:使用strlen获取远程文件大小? (html)

    我正在查看 fsockopen 之类的 PHP 文档 他们说你不能在远程文件上使用 filesize 而不用 ftell 或其他东西做一些疯狂的事情 不确定他们到底说了什么 但我有一个很好的想法怎么做 file file get conte
  • setInterval() 只运行一次函数

    我想定期查询 PHP 脚本以获取新消息 为此 我使用 setInterval 函数和 AJAX document ready function var queryInterval 1000 How fast we query for new
  • C++ 类方法的 LD_PRELOAD

    我需要在 C 程序中插入方法调用 该类驻留在单独的共享库中 我以为我可以使用 LD PRELOAD 但我不确定这将如何工作 我只找到了 C 函数的示例 是否有一种方法可以为单个方法设置插入 而无需从插入的类实现中复制任何代码 只需为插入的代
  • OpenGL NURBS 曲面

    我正在学习 OpenGL 我想要一个中间有轻微驼峰的表面 我目前正在使用这段代码 但我不确定如何调整 ctrl 点以使其达到我想要的方式 它目前就像 我想要这样的 我不完全确定我应该使用哪些控制点 并且我对其工作原理感到困惑 include
  • Microsoft Cognitive API 不断告诉我:“消息”:“输入数据不是有效的图像或受密码保护。”

    我有图像的 base64 字符串 我正在尝试将其转换为 应用程序 八位字节流 因为这就是 api 所需要的 我认为我已经通过创建一个 blob 来做到这一点 正如您从我的函数中看到的那样 当我进行 api 调用时 我不断收到标题中的消息 有
  • 如何通过 JOIN 组合(合并)相似的列以删除 NULL

    问题简介 我有一个名为 客户 的超类表和两个从客户继承的名为 个人 和 公司 的子表 因此 客户实体与 人 或 公司 具有一对一的关系 客户只能是 个人 或 公司 但不能同时是两者 如下所示 Customer Person Company
  • 可以用excel引用外部宏吗?

    我有一个相当复杂的宏 需要在多个不同的 Excel 工作表上运行 该宏会定期更新 并且每当进行更改时 都需要在每个单独的 Excel 工作表中进行更改 有没有一种方法可以让每个Excel文档引用一个宏 例如 如果我有这样的层次结构 DOCU
  • Azure AD - 获取用户的个人资料照片,OAUTH 访问失败

    我正在尝试在使用 EWS 连接到 Office 365 的电子邮件应用程序的上下文中访问登录用户的个人资料照片 该应用程序已在 Portal azure com 上注册 并具有以下所需权限 Office 365 Exchange Onlin
  • 如何将图标放入自定义对话框的标题中

    我想将一个可绘制对象放入对话框标题栏中 我尝试了以下方法 final Dialog dialog new Dialog this dialog requestWindowFeature Window FEATURE LEFT ICON di
  • 带有身份的 ASP.NET Core 2.0 中的 Cookie 过期

    环境 ASP NET Core 2 0 带有cookie的身份 In Startup ConfigureServices 有这样的 services ConfigureApplicationCookie options gt options
  • TikTok 登录套件:非法重定向链接

    我正在看新的TikTok 登录套件对于网络 我陷入了重定向步骤 与所有基于 oAuth 的服务类似 当您注册应用程序时 它们应该要求提供有效的重定向 URL 对于 TikTok 他们要求重定向域 如下所示 然后根据他们的官方文档 https
  • Laravel 5.1 失败的排队作业在 failed() 方法上失败,阻止调用队列失败事件处理程序

    我正在测试 Laravel 5 1 中的队列功能 我可以让作业在我的数据库表中排队 称为作业 并且可以让它们成功运行 我还创建了一个名为 failed jobs 的队列失败表 为了测试它 在作业表中 我操作有效负载数据以使其失败 然后像这样
  • Swift:递归值类型

    我有一个结构 我想在其中有一个 Struct 类型的全局变量 这个例子本质上是我实际创建的结构的简短版本 struct SplitString splits a string into parts before and after the
  • 正则表达式中的顺序不重要吗?

    我正在查看此 stackoverflow 链接中提出的问题 奇数个 a 的正则表达式 https stackoverflow com questions 28902496 regular expression for odd number
  • ZMQ 模式经销商/路由器心跳

    我在客户端有一个经销商套接字 它连接到服务器端的路由器套接字 我经常看到心跳机制 服务器定期向客户端发送消息 以便客户端知道自己是否正确连接到服务器 以便客户端在一段时间内没有收到消息时可以重新连接 例如这里的偏执海盗模式 http zgu
  • 在 Aurelia 中,我可以绑定包含视图模型中的函数以供自定义元素调用吗?

    我有一个自定义元素 它将接受用户输入 并且在单击 保存 按钮时 我想将信息传递给父视图模型 以便我可以将其发送到服务器并移至下一部分 例如 我将简化这一点 my element js import customElement bindabl