gpt4 book ai didi

javascript - 无需构造函数注入(inject)即可访问 Aurelia 的依赖注入(inject)系统

转载 作者:搜寻专家 更新时间:2023-11-01 05:29:30 26 4
gpt4 key购买 nike

有没有一种方法可以在不注入(inject)构造函数的情况下访问 Aurelia 的依赖注入(inject)系统。

我有一个名为 Box 的类。我需要知道它的其中一个属性何时发生变化,以便我可以更新我的验证。我发现我可以使用此 answer 中的 bindingEngine.propertyObserver

但我的 Box 实例是由 BreezeJs 创建的,而不是 Aurelia。因此,使用 @inject(在我的例子中是 @autoinject)获取 bindingEngine 的实例是行不通的。

我看到 aurelia.container.get 会让我从 Aurelia 的 DI 框架中解析。但这需要 Aurelia 对象的当前实例。我能看到的唯一方法是……构造函数注入(inject)!

因此,要绕过构造函数注入(inject),您需要...构造函数注入(inject)!

我希望我遗漏了一些东西,还有另一种方法可以在不注入(inject)构造函数的情况下获取 bindingEngine 的实例。

注意:现在我只是将我的变量转换为 javascript 属性并自行触发更改的事件。但我知道这会让我进行脏检查...:(

最佳答案

如果您想知道微风实体的属性何时更改,请使用 entityAspect.propertyChanged 事件:

http://breeze.github.io/doc-js/api-docs/classes/EntityAspect.html#event_propertyChanged

order.entityAspect.propertyChanged.subscribe(
function (propertyChangedArgs) {
// this code will be executed anytime a property value changes on the 'order' entity.
var entity = propertyChangedArgs.entity; // Note: entity === order
var propertyNameChanged = propertyChangedArgs.propertyName;
var oldValue = propertyChangedArgs.oldValue;
var newValue = propertyChangedArgs.newValue;
});

不推荐绕过构造函数注入(inject)。它违反了 dependency inversion principle ,但是有一种机制可以这样做:

ma​​in.js

export function configure(aurelia) {
aurelia.container.makeGlobal();
...
}

box.js

import {Container} from 'aurelia-dependency-injection';

let bindingEngine = Container.instance.get(BindingEngine);

关于javascript - 无需构造函数注入(inject)即可访问 Aurelia 的依赖注入(inject)系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com