双向在奥里利亚自定义绑定属性

问题描述:

UPDATE:它看起来这是一个已知的bug:https://github.com/aurelia/templating/issues/253
我离开这里以供参考/可搜索的目的。双向在奥里利亚自定义绑定属性

的代码:

输入mask.ts(全代码可以看出here

@customAttribute('input-mask') 
@inject(Element) 
export class InputMaskCustomAttribute { 

    @bindable({ defaultBindingMode: bindingMode.twoWay, 
       changeHandler: 'onUnmaskedValueChanged' }) 
    unmaskedValue: any; 

    onUnmaskedValueChanged(newValue, oldValue) { 
     console.log('unmaskedValue updated from inside the custom attribute'); 
    } 

    @bindable 
    mask: string; 

    attached() { 

      this.eventTarget.on('focusout', (e: any) => { 
      this.unmaskedValue = (<any>$(this.element)).cleanVal() 
      this.fireEvent(e.target, 'input'); 
      }); 
    } 

    // Code for constructor, fireEvent and to setup the mask... 
} 

carrier.html

<input input-mask="mask.bind: carrier.airbillMask; unmasked-value.bind: airbill" 
     value.bind="formattedAirbill"/> 

更新:要解决此错误,请更改为unmasked-value.two-way,并且绑定将起作用。

carrier.ts

@bindable({ defaultBindingMode: bindingMode.twoWay}) 
carrier: EntityInterfaces.ICarrier; 

@bindable({ defaultBindingMode: bindingMode.twoWay }) 
formattedAirbill: string; 

@bindable({ defaultBindingMode: bindingMode.twoWay, changeHandler: 'onAirbillChanged' }) 
airbill: string; 

onAirbillChanged() { 
    console.log('Airbill was set!'); 
} 

问题:

的数据似乎流入@bindable变量就好了。随着蒙版更改,自定义属性中的值将更改。

但是,如果在自定义属性中进行更改,它似乎不会流出。

示例场景: 我编辑输入框中的值之后,并退出输入时,focusout事件触发,并且表明未屏蔽值从自定义打印内部属性更新控制台声明:

unmaskedValue从自定义内更新的属性

但(当输入失去焦点)控制台声明称,airbill上carrier.ts文件进行了更新,当我退出输入框不火:

这不火:
的console.log(“!空运单设置”);

这似乎向我显示绑定不是真正的双向。

问题:

我怎样才能使这种结合双向?因此,当我更新unmaskedValue内部的自定义属性时,它将更新视图模型中的界限值?

注意:作为解决方法,我可以将unmasked-value.bind更改为方法调用(on-unmasked-value-changed.call="onUnmaskedValueChanged($event))并更新该方法中的值。所以我不需要这个工作。但我想知道是否有可能用于未来。

+0

看起来这是一个已知的bug: https://github.com/aurelia/templating/issues/253 – Vaccano

+0

将HTML中的绑定更改为'.two-way'(而不是'.bind')可以解决此问题。 – Vaccano

+1

看起来这个问题已关闭,您是否可以按照您现在的方式使用它,而无需解决方法? –

尝试用默认值初始化变量unmaskedValue。尝试null,undefined,等等。我以前做过,但我不`吨记得在哪个版本(当然这是测试版)

这已知的bug已经修复,并于3月15日收盘2016 https://github.com/aurelia/templating/issues/253#issuecomment-189394955