首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aurelia自定义属性中的双向绑定

Aurelia自定义属性中的双向绑定
EN

Stack Overflow用户
提问于 2016-02-26 17:40:38
回答 2查看 1.6K关注 0票数 9

更新:看起来这是一个已知的bug:https://github.com/aurelia/templating/issues/253 我把它留在这里,以供参考/搜索之用。

“守则”:

input-mask.ts (完整的代码可以看到这里)

代码语言:javascript
复制
@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

代码语言:javascript
复制
<input input-mask="mask.bind: carrier.airbillMask; unmasked-value.bind: airbill" 
       value.bind="formattedAirbill"/>

更新:为了解决这个错误,更改为unmasked-value.two-way,绑定就可以工作了。

carrier.ts

代码语言:javascript
复制
@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

但是(当输入失去焦点时)当我退出输入框时,表示carrier.ts文件上的carrier.ts被更新的控制台语句不会触发:

这不会引发: Console.log(“Airbill!”);

这似乎向我表明,绑定并不是真正的双向的。

问题是:

,我怎样才能使这个绑定双向?这样,当我在自定义属性中更新unmaskedValue 时,它将更新视图模型?中的绑定值。

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

EN

回答 2

Stack Overflow用户

发布于 2018-03-07 13:21:06

这个已知的错误已于2016年3月15日修复并关闭了https://github.com/aurelia/templating/issues/253#issuecomment-189394955

票数 0
EN

Stack Overflow用户

发布于 2016-08-10 11:38:06

尝试用默认值初始化变量unmaskedValue。尝试null、未定义、'‘等等。我以前也这样做过,但我不记得在哪个版本(当然是测试版)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35658280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档