2016-02-25 72 views
1

验证码:

我 - 视图 - 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 

    } 
} 

的问题:

我有一个自定义att使我能够检测到扫描的肋骨,修改已扫描的数据并将其设置为输入元素的值。

但是,我需要更新aurelia更新的值。

我可以发射一个'输入'事件来实现这一点。但是,当发生随机“输入”事件时,我发现了副作用。

我宁愿用这里概述信号系统: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信号,那么您可以定位该控件并发送除更新绑定外无副作用的事件。

回答

2

我觉得你遇到了麻烦,因为你正处在从自定义属性切换到使用自定义元素的方法的临界点。

你可以做这样的事情规避整个问题:

scanner.html

<template> 
    <input ref="input" value.bind="value"> 
</template> 

扫描仪。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> 

这仍然可以用一个自定义的属性来完成,但似乎这样更自然的我。你怎么看?

+0

这是有道理的。感谢您的答复。 – Vaccano