从另一个自定义属性访问自定义属性的绑定

时间:2017-03-13 20:46:27

标签: javascript aurelia

假设我正在使用Aurelia自定义属性,是否可以在绑定到另一个自定义属性的值发生更改时触发事件?

更具体地说,我正在为选择建立Aurelia自定义属性。我得到了所有选择的工作。

<select>元素上有focus.bind="isFocused"。当绑定值发生变化时,我需要知道(在我选择的自定义属性中)。

有没有办法在我选择的自定义属性中访问焦点绑定(来自焦点自定义属性)?可能使用绑定引擎甚至是内部方法?

(注意:我考虑过制作一个自定义元素来执行此操作,但Aurelia不能很好地包装元素。我必须为样式,类和原始选择组件上的任何其他内容编写连接。)< / p>

2 个答案:

答案 0 :(得分:0)

我不确定这是否是正确的做法,但这是我迄今为止发现的最简单方法。

我-attr.js

import { inject } from 'aurelia-framework';
import { Focus } from 'aurelia-templating-resources';

@inject(Focus)
export class MyAttrCustomAttribute {

  constructor(focusAttr) {
    this.focusAttr = focusAttr;
  }

  attached() {
    console.log(this.focusAttr.value); //bound value

    //...
    //extending the change event. BE CAREFUL!
    //...

    const originalValueChanged = this.focusAttr.valueChanged;
    this.focusAttr.valueChanged = function(newValue) {
      console.log('Focus bound value has changed!'); //<-- call an event before "focus"
      originalValueChanged.call(this, newValue); //<-- "focus" is enqueued
      // <--- enqueue an event event here to be called after "focus"
    }

  }
}

正在运行示例https://gist.run/?id=ab04facb60b39f9c6a5fc49c2fd278a6

答案 1 :(得分:0)

尝试使用绑定行为拦截绑定的updateSource(更新视图模型)和updateTarget(更新视图)方法。在自定义绑定行为部分的文档中有一个这样的运行示例。

KISS