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);
}
}