Javascript 更新Aurelia自定义属性中的绑定 守则:

Javascript 更新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="

我的视图模型.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="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>


这仍然可以通过自定义属性来完成,但对我来说,这种方式似乎更自然。你觉得怎么样?

这很有道理。谢谢你的回复。