Aurelia 的财产变更订阅

2024-01-28

我的视图模型上有一个属性,我想根据其值监听并触发事件,如下所示:

class viewModel {
  constructor() {
    this.value = '0';
    let val = 2;
    subscribe(this.value, callbackForValue);
    subscribe(val, callbackForVal);
  }
}

这是Aurelia的特色吗?如果是这样,我将如何设置这样的订阅?


在一些插件中我一直在使用 DI 来获取ObserverLocator来自容器的实例:

import {inject} from 'aurelia-dependency-injection';  // or from 'aurelia-framework'
import {ObserverLocator} from 'aurelia-binding';      // or from 'aurelia-framework'

@inject(ObserverLocator)
export class Foo {
    constructor(observerLocator) {
        this.observerLocator = observerLocator;
    }
    ...
}

然后你可以做这样的事情:

var subscription = this.observerLocator
    .getObserver(myObj, 'myPropertyName')
    .subscribe(myCallback);

当您准备好处理订阅时,调用它:

subscription();

我认为这一切都可能会发生变化,但如果您需要的话,您现在就可以使用它。

更多信息here http://www.danyow.net/aurelia-property-observation/

2015 年 10 月更新

ObserverLocator 是 Aurelia 的内部“裸机”API。现在有一个可以使用的绑定引擎的公共 API:

import {inject} from 'aurelia-dependency-injection';  // or from 'aurelia-framework'
import {BindingEngine} from 'aurelia-binding';        // or from 'aurelia-framework'

@inject(BindingEngine)
export class ViewModel {
  constructor(bindingEngine) {
    this.obj = { foo: 'bar' };

    // subscribe
    let subscription = bindingEngine.propertyObserver(this.obj, 'foo')
      .subscribe((newValue, oldValue) => console.log(newValue));

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

Aurelia 的财产变更订阅 的相关文章

随机推荐

  • 谁能告诉我为什么我的算法是错误的?

    我正在研究单源最短路径问题 我对 bfs 进行了修改 可以解决该问题 该算法运行时间为 O 2E 次 我只是不明白为什么它是错误的 一定是这样 否则 dijstra 不会是最有效的算法 def bfs modified G src des
  • Cocos2d 游戏中的碰撞检测?

    我正在尝试检测碰撞 of two sprites按照以下方式 但是当我尝试运行游戏时没有发生碰撞 我可能做错了什么 void update ccTime dt CGRect projectileRect CGRectMake project
  • MongoDB:启动期间无法设置套接字

    我有 Windows 8 1 Enterprise 64 位机器 我已经为 Windows 安装了带有 SSL 支持的 mongodb msi 我创建了环境设置所需的所有必要条件 现在使用命令提示符导航到 mongodb 安装文件夹中的 b
  • 取消订阅 Single 的正确方法是什么[重复]

    这个问题在这里已经有答案了 我想做一些短暂的延迟后 public void notifyMe Single timer 500 TimeUnit MILLISECONDS subscribeOn Schedulers io subscrib
  • Rails 3.2.13 recognize_path 返回约束的路由错误

    我的路线中有两条路径 相同的路径指向不同的控制器和操作 match id gt users show as gt user constraints gt UserConstraint match id gt customers show a
  • 无法使用 ARIMA 预测下一个值:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值

    我有以下代码片段 import pmdarima as pmd ts 3 86 5 52 68 14 20 12 22 4 2 model pmd auto arima ts start p 1 start q 1 test adf est
  • DTMF Goertzel 算法不起作用

    因此 我正在打开我在 audacity 中生成的 DTMF 音调的 raw 文件 我抓住了一个类似于维基百科文章中的罐装 goertzel 算法 但它似乎无法解码正确的数字 解码后的数字也会根据我传递给算法的 N 值而变化 据我了解 较高的
  • 生成随机数的div

    我无法让脚本创建随机数量的 div 在这个具体示例中 介于 5 和 20 之间 问题可能出在 for 循环中 生成随机数的函数在随机颜色函数下面正常工作 我猜由于某些原因它没有被识别 另外我在萤火虫中没有收到任何错误 Example fun
  • 调用 addAction 时删除通知?

    我在通知中添加了两个操作按钮 当我单击其中任何一个时 它们会执行所需的操作 但通知仍保留在我的通知抽屉中 我知道单击操作按钮时可以从通知抽屉中删除通知 因为这就是 Gmail 的功能 如果我单击主通知 它将打开应用程序并从通知抽屉中删除通知
  • 课程。重点是什么?

    我对 PHP 中的 OOP 相当陌生 我编写了几个基本脚本 但没有什么令人印象深刻的 我真正从中得到的只是 制作一组函数可能会更容易 include them 类的结构似乎只是混淆了原本简单的过程 将所有内容整理到一个类中并没有真正添加任何
  • 如何从文件中提取文本行?

    我有一个充满文件的目录 我需要从中提取页眉和页脚 它们的长度都是可变的 因此使用头部或尾部是行不通的 每个文件都有一行我可以搜索 但我不想在结果中包含该行 通常是 Start more text here 并结束于 Finish more
  • elixir+hex - ranch_proxy_protocol ssl:ssl_accept 3 已弃用,出现十六进制错误

    enter code here我正在以下命令运行 mix ecto create mix ecto migrate 这给出了一个错误 gt Compiling ranch proxy protocol gt Compiling src ra
  • javax.ws.rs.ProcessingException,在 Payara Server 5 中找不到内容类型 application/json 类型的 writer

    first Sorry for my bulky source code and simple question 我收到这个错误 javax ws rs ProcessingException RESTEASY003215 找不到内容类型应
  • Mockito 测试 void 方法抛出异常

    我有一个方法void返回类型 它还可能引发许多异常 因此我想测试引发的这些异常 所有尝试都失败了 原因相同 Stubber 类型中的方法 when T 不适用于参数 void 有什么想法如何让方法抛出指定的异常吗 doThrow new E
  • 使用 Boto3 列出所有“活动”EMR 集群

    我正在尝试使用 boto3 列出 EMR 上的所有活动集群 但我的代码似乎不起作用 它只是返回 null 我正在尝试使用 boto3 来做到这一点 1 列出所有活动的EMR集群 aws emr list clusters active 2
  • 谷歌翻译 API 之间的区别

    我正在构建一个基于 Google 翻译的开源 Chrome 扩展 here https github com MagTun Customizable Google Translate Chrome extension blob master
  • 在 Python 中将 SQL 与 IBM_DB 连接器结合使用

    有没有人用过ibm db使用 IBM 的 Python for PASE 打包来更新 IBM i 以前称为 AS 400 上的 Db2 文件 我想使用 Python 脚本 来自 QSH 来更新 Db2 数据库 我的目的是在运行时填充值并更新
  • 现在必须显式声明注释处理器

    Error Execution failed for task laMusique2May2016 javaPreCompileRelease gt Annotation processors must be explicitly decl
  • 如何使用 Mandrill 模板从 MERGE VARS 中传递的数组中渲染列表

    我必须用merge vars key some key template name order confirmation template content name ORDERNUMBER content 12312312321 name
  • Aurelia 的财产变更订阅

    我的视图模型上有一个属性 我想根据其值监听并触发事件 如下所示 class viewModel constructor this value 0 let val 2 subscribe this value callbackForValue