我 - 视图 - model.html
<input on-scan.bind="onAirbillScanned" value.bind="airbill"/>
在-scan.ts
attached() {
var scannerOptions = { onComplete: this.onScan.bind(this), preventDefault: true };
(<any>$(this.element)).scannerDetection(scannerOptions);
-- Code to add a signal to the value binding.
}
onScan(scannedValue, data) {
if (typeof (this.value) == 'function') {
let updatedScanValue = this.value(scannedValue);
if (updatedScanValue !== undefined)
this.element.value = updatedScanValue;
else
this.element.value = scannedValue;
-- Code to Call the Signal
}
}
我有一个自定义属性,允许我检测扫描,修改扫描数据并将其设置为输入元素的值。
但是,我需要使用更新后的值更新aurelia。
我可以发起一个输入&#39;实现这一目标的事件。但是当我随机输入&#39;时,我发现了副作用。事件被解雇了。
我宁愿使用此处列出的信号系统:http://aurelia.io/docs.html#/aurelia/binding/1.0.0-beta.1.1.3/doc/article/binding-binding-behaviors
但问题是我需要信号在value.bind
绑定。
有没有办法(使用我对绑定所在的element
的访问权限)来更新value.binding
以获得我可以调用以获取更新绑定的信号?
基本上我正在寻找这样的东西:
addSignal(element, property, signal) {...}
...
addSignal(this.element, 'value', 'scanFinished');
它会更新输入的值绑定,如下所示:
<input on-scan.bind="onAirbillScanned" value.bind="airbill & signal: 'scanFinished'"/>
但不仅仅是重写html,还必须更新Aurelia以了解信号。
或者Aurelia是否为这样的场景添加了所有绑定的信号值?
注意:如果所有aurelia绑定都定义了AureliaBinding
信号,那将是非常棒的,因此您可以定位该控件并发送除了更新绑定之外没有副作用的事件。
答案 0 :(得分:2)
我认为你遇到了麻烦,因为你正处于从自定义属性切换到使用自定义元素的方法的转折点。
你可以通过这样的事情来解决整个问题:
<强> scanner.html 强>
<template>
<input ref="input" value.bind="value">
</template>
<强> scanner.js 强>
import {bindingMode} from 'aurelia-framework';
export class Scanner {
@bindable({ defaultBindingMode: bindingMode.twoWay }) value;
@bindable scanModifier = x => x;
input: HTMLInputElement;
attached() {
let scannerOptions = {
onComplete: value => this.value = this.scanModifier(value),
preventDefault: true
};
(<any>$(this.input)).scannerDetection(scannerOptions);
}
detached() {
(<any>$(this.input)).scannerDetection('destroy');
}
}
<强>用法:强>
<require from="./scanner"></require>
<scanner value.bind="airbill" scan-modifier.call="onAirbillScanned($event)"></scanner>
这仍然可以通过自定义属性完成,但这对我来说似乎更自然。你觉得怎么样?