这是我的场景。
我想创建一个单独的 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>
预期效果:
- 页面加载。
- 应用翻译。
- 启动服务调用以检索数据。
- 服务调用返回。
- 数据被转换为视图模型并绑定到页面(并保留翻译)。