2016-02-25 54 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