2017-04-16 75 views
0
一個綁定行爲

我目前得到它使用momentjs到日期轉換爲字符串一個簡單的值轉換器:奧裏利亞創建包裝SignalBindingBehaviour

export class MomentValueConverter { 
    public toView(value: Date, format: string): string { 
    return moment(value).format(format); 
    } 
} 

然而,無論我用它,我最終不得不將其聯合aurelia-translation-signal,以便在用戶更改當前語言時更新它。

${fileSaved | moment:'ll LTS' & signal:'aurelia-translation-signal'} 

如何,而不是建立一個綁定的行爲會自動處理信令從aurelia-translation-signal

然後,我可以用它喜歡:

${fileSaved & moment:'ll LTS'} 

回答

1

有一個在Aurelia大街,國際化庫一個很好的例子,https://github.com/aurelia/i18n/blob/master/src/t.js#L89-L122

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

UPDATE:信號是按值轉換器已經http://aurelia.io/docs/binding/value-converters#signalable-value-converters

內部支持
import {signalBindings} from 'aurelia-framework'; 

signalBindings('locale-changed'); 


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

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

你說得對,那將是一個很好的開始! – Tim

+0

嘗試將示例放在答案中,而不僅僅是鏈接。鏈接可能會變得過時 –

+0

使用來自源代碼的示例代碼進行更新 – valichek