Data binding Aurelia创建了一个绑定行为来包装SignalBindingBehavior

Data binding Aurelia创建了一个绑定行为来包装SignalBindingBehavior,data-binding,aurelia,Data Binding,Aurelia,我目前有一个简单的值转换器,它使用momentjs将日期转换为字符串: export class MomentValueConverter { public toView(value: Date, format: string): string { return moment(value).format(format); } } 然而,无论我在哪里使用它,我最终都必须将它与aurelia翻译信号相结合,以便在用户更改当前语言时更新它 ${fileSaved | moment:'

我目前有一个简单的值转换器,它使用
momentjs
将日期转换为字符串:

export class MomentValueConverter {
  public toView(value: Date, format: string): string {
    return moment(value).format(format);
  }
}
然而,无论我在哪里使用它,我最终都必须将它与
aurelia翻译信号相结合,以便在用户更改当前语言时更新它

${fileSaved | moment:'ll LTS' & signal:'aurelia-translation-signal'} 
我如何创建一个绑定行为来自动处理来自
aurelia翻译信号的信号呢

然后我可以像这样使用它:

${fileSaved & moment:'ll LTS'}

aurelia-i18n库中有一个很好的例子

更新:信号已经由值转换器内部支持


aurelia-i18n库中有一个很好的例子

更新:信号已经由值转换器内部支持


尝试在答案中加入示例,而不仅仅是链接。链接可以成为outdated@valichek我说有一种新的方法可以做到这一点,对吗?@Tim,请解释一下你的意思。@Tim nice catch,我会把这个链接添加到官方的医生那里,把这个例子放在答案中,而不仅仅是链接。链接可以成为outdated@valichek我说有一种新的方法可以做到这一点,对吗?@Tim,请解释一下你的意思?@Tim nice catch,我将添加官方文档的链接
import {ValueConverter} from 'aurelia-binding';
import {SignalBindingBehavior} from 'aurelia-templating-resources';

export class TBindingBehavior {
  static inject = [SignalBindingBehavior];

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

  bind(binding, source) {
    // bind the signal behavior
    this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal');

    // rewrite the expression to use the TValueConverter.
    // pass through any args to the binding behavior to the TValueConverter
    let sourceExpression = binding.sourceExpression;

    // do create the sourceExpression only once
    if (sourceExpression.rewritten) {
      return;
    }
    sourceExpression.rewritten = true;

    let expression = sourceExpression.expression;
    sourceExpression.expression = new ValueConverter(
      expression,
      't',
      sourceExpression.args,
      [expression, ...sourceExpression.args]);
  }

  unbind(binding, source) {
    // unbind the signal behavior
    this.signalBindingBehavior.unbind(binding, source);
  }
}
import {signalBindings} from 'aurelia-framework';

signalBindings('locale-changed');


export class FlightTimeValueConverter {
  signals = ['locale-changed'];

  toView(date) {
    return date.toLocaleString(window.currentLocale);
  }
}