我正在使用 KO 外部模板引擎将我的单页 webapp 分解为多个文件,但我正在加载的模板仅包含 KO 标记。
尽管对该主题进行了广泛研究,但我无法弄清楚如何将 KO 绑定可靠地应用于正在加载的模板。
关键点是:
- 模板定义的 DOM 元素最初不存在
- 我的模板绑定是动态的,所以我不认为 KO 在将绑定应用于整个文档时会请求模板
- 我不想让模板加载同步
- pb 变得更加棘手,因为注入器可能正在发生一些模板缓存,这导致 KO 抱怨我应用了两次绑定。
这是我的代码,它至少有两个问题:
- 无法保证模板已完成加载,因为我正在调用 applyBindings
- KO 抱怨我在来回导航时尝试重新应用绑定
在将外部模板节点添加到 DOM 时,有什么建议可以使用一种干净、可靠的方法将绑定一次且仅一次应用于外部模板节点?
在index.html中:
<div id="templateDiv" data-bind="template: { name: currentView() }"></div>
在main.js 中:
function AdminViewModel() { var self = this; self.currentView = ko.observable('adminHome'); } var viewModel = new AdminViewModel(); var SammyApp = $.sammy('#admin_content', function() { //... this.get('#/editMembers', function(context) { viewModel.currentView('editMembers'); ko.applyBindings(viewModel, $('.ko-template').get(0)); }); }; ko.applyBindings(viewModel);