Javascript 更新Aurelia自定义属性中的绑定 守则:
我的视图模型.htmlJavascript 更新Aurelia自定义属性中的绑定 守则:,javascript,aurelia,Javascript,Aurelia,我的视图模型.html <input on-scan.bind="onAirbillScanned" value.bind="airbill"/> <template> <input ref="input" value.bind="value"> </template> 它将更新输入的值绑定,如下所示: addSignal(element, property, signal) {...} <input on-scan.bind="
<input on-scan.bind="onAirbillScanned" value.bind="airbill"/>
<template>
<input ref="input" value.bind="value">
</template>
它将更新输入的值绑定,如下所示:
addSignal(element, property, signal) {...}
<input on-scan.bind="onAirbillScanned" value.bind="airbill & signal: 'scanFinished'"/>
但除了重新编写html,它还必须更新Aurelia以了解信号
或者,对于这样的场景,Aurelia是否会向所有绑定添加一个信号值
注意:如果所有的aurelia绑定都定义了一个
AureliaBinding
信号,这样您就可以将该控件作为目标,并发送一个除了更新绑定之外没有任何副作用的事件,那就太棒了。我认为您遇到了麻烦,因为您正处于从自定义属性切换到使用自定义元素的方法
您可以通过这样做来规避整个问题:
addSignal(element, property, signal) {...}
<input on-scan.bind="onAirbillScanned" value.bind="airbill & signal: 'scanFinished'"/>
scanner.html
<input on-scan.bind="onAirbillScanned" value.bind="airbill"/>
<template>
<input ref="input" value.bind="value">
</template>
scanner.js
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
}
}
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');
}
}
从“aurelia框架”导入{bindingMode};
导出类扫描仪{
@bindable({defaultBindingMode:bindingMode.twoWay})值;
@可绑定扫描修改器=x=>x;
输入:HTMLInputElement;
附({
让扫描仪选项={
onComplete:value=>this.value=this.scanModifier(值),
默认值:true
};
($(this.input)).scannerDetection(scannerOptions);
}
分离的(){
($(this.input)).scannerDetection('destroy');
}
}
用法:
<require from="./scanner"></require>
<scanner value.bind="airbill" scan-modifier.call="onAirbillScanned($event)"></scanner>
这仍然可以通过自定义属性来完成,但对我来说,这种方式似乎更自然。你觉得怎么样?这很有道理。谢谢你的回复。