這是我的場景。處理多個頁面級綁定提供程序
我想創建一個單獨的KnockoutJS處理上我的網頁翻譯結合提供商將讀取data-alias
屬性的任何元素或者出現在頁面加載或頁面加載(可能是真實的渲染子模板創建之後創建敲除)並檢索別名的翻譯並將它們作爲元素的文本應用。我仍然希望能夠獨立呼叫ko.applyBindings(model, element);
來處理頁面的data-bind
屬性,但我希望單獨調用ko.applyBindings
,以便翻譯可以應用於data-alias
屬性。任何人都知道我可以如何支持並讓他們獨立行事?
下面是過程應該如何進行的一個例子。
的HTML標記/模板:
<fieldset>
<legend data-alias="SomeTitle"></legend>
<div class="row-container">
<div class="control-group">
<label class="control-label" data-alias="LabelAlias"></label>
<div class="controls">
<input type="text" data-bind="value: SomeObservable" />
</div>
</div>
<div class="control-group">
<label class="control-label" data-alias="AnotherLabelAlias"></label>
<div class="controls">
<input type="text" data-bind="value: AnotherObservable" />
</div>
</div>
</div>
</fieldset>
在頁面加載,會有用的數據別名綁定提供應用綁定的電話:
<script type="text/javascript">
$(function() {
// Lets assume translations is a dictionary of alias to translation
// that is loaded with the page synchronously
ko.applyBindings(translations);
});
</script>
而且在頁面加載,將會有一個服務調用來檢索頁面所需的數據,並在檢索後應用綁定到數據:
<script type="text/javascript">
$(function() {
$.ajax({...}) // Omitted for brevity
.done(function(data) {
var viewModel = new my.namespace.SomeViewModel(data);
ko.applyBindings(viewModel);
});
});
</script>
預期效果:
- 頁面加載。
- 應用翻譯。
- 服務呼叫被啓動以檢索數據。
- 服務調用返回。
- 數據轉換爲視圖模型並綁定到頁面(並保留翻譯)。
對於當前的KO實例,您一次只能有一個綁定提供程序處於活動狀態。一個想法是創建一個綁定提供程序來封裝真正的綁定提供程序,但會暴露一個「模式」以確定要查找的內容。然後,您可以在進行翻譯綁定時設置此模式。 –
是的,那可能會奏效。當我有機會時,我會研究它。 – DanilF
因此,您的第一個頁面加載調用獲取翻譯綁定,然後第二個調用將獲得這些綁定的結果以獲取翻譯? –