當下一個版本發佈時,您將能夠使用signal
綁定行爲爲綁定分配「信號名稱」,如此:
<h1>${'title_key' | t & signal:'i18n'}</h1>
<p>${'content_key' | t & signal:'i18n'}</p>
的&
符號表示「結合行爲」(相對於|
爲值轉換器)。綁定行爲是爲綁定添加「行爲」的資源。他們可以完全訪問綁定實例,並在綁定的bind
和unbind
生命週期事件之前收到通知。
Aurelia將附帶一些內置的綁定行爲:「油門」,「反彈」,「一次性」,「信號」等。您還可以選擇創建自己的綁定行爲。
在上面的例子中,我們給title
和content
插值綁定了一個「信號」名稱「i18n」。這個名字是任意的,我們只需要知道它是什麼,所以我們可以「信號」綁定使用BindingSignaler
這樣刷新:
import {BindingSignaler} from 'aurelia-templating-resources';
import {inject} from 'aurelia-framework';
@inject(BindingSignaler)
export class App {
constructor(signaler) {
this.signaler = signaler;
}
// invoking this method will refresh all bindings in the application
// with the "signal name" of "i18n"
refreshBindings() {
this.signaler.signal('i18n');
}
}
我想象一旦綁定行爲功能下降將有額外的工作i18n插件將t
值轉換器與某些版本的signal
綁定行爲相結合,以啓用簡潔的綁定表達式,以便在語言更改時兼顧翻譯和刷新綁定,因此您可能需要暫時坐下來。
編輯 如果你需要的東西今天,你可以採取現有奧裏利亞功能的優勢:綁定重新評估時,轉換器參數變化。
- 創建一個新類:
export class LanguageChangedNotifier {
signal = 0;
notify() {
this.signal++;
}
}
- 注入此類納入所有視圖的模型和添加的實例作爲一個屬性:
@inject(LanguageChangedNotifier)
export class App {
constructor(notifier) {
this.notifier = notifier;
}
}
- 在您的
t
綁定中使用通知符(它不會影響所述t
值轉換器的行爲):
${'status_deceased' | t:notifier.signal}
- 當改變區域設置,使用通知刷新綁定:
this.notifier.notify();
真棒傑里米。 Aurelia及其社區/開發人員是我迄今爲止在任何框架中遇到的最有用和最聰明的一些。我確實有一個小問題。我有這個最後的問題(刷新/翻譯的事情),我一直在未來的實際使用Aurelia在大客戶的生產。所以,儘管我一定會添加這個 - 正確的方法 - 一旦下一個版本發佈,您能否爲我提供一個臨時解決方案供我使用。需要明天提供。如果全部失敗我想我可以被迫使用window.location,但我希望不會! :-) – Dac0d3r
肯定 - 請參閱上述編輯的解決方法。希望你明天發佈一切順利! –
輝煌。非常感謝! :D – Dac0d3r