3
我 “动态” 填充我的网页是这样的:Knockoutjs:动态内容和applyBindings
<script type="text/html" id="ContainerTemplate">
<span data-bind="template: {
name: contentTemplate,
data: contentData }"></span>
</script>
<script type="text/html" id="fooTemplate">
<span data-bind="text: barAttribute"></span>
</script>
<button data-bind="click: complete">complete</button>
Hello
<span data-bind="template: { name: 'ContainerTemplate', foreach: myContents }"></span>
!
视图模型:
var viewModel = {
myContents: ko.observableArray([]),
complete: function() {
viewModel.myContents.push({
contentTemplate:'fooTemplate',
contentData:{barAttribute:'world'}});
}
};
ko.applyBindings(viewModel);
一个特别之处是,模板名称是动态的。它似乎是这样工作的(你可以试试http://jsfiddle.net/hPQNx/),但是我想知道我是否正确地做事。某些模板功能(如根或父级)似乎无法正常工作。
我应该在某个时候手动重新调用applyBindings吗?我已经看到这必须在相关的DOM节点上完成,但是如何在我的设置中访问这些节点?
的确。我很抱歉没有在小提琴中进行过这样的测试。我的假设是,这是因为动态模板,但这可能是因为我有一个老版本的Knockoutjs(1.2.1)?有没有版本的文档,或者我可以检查的功能更改日志? – Gnurfos 2011-12-31 16:32:33
1.2.1不支持$ root,$ parent,$ parents(或者jQuery模板之外的$ data)。这些上下文变量在2.0中添加。 – 2011-12-31 17:57:18
@Gnurfos - 没错。直到KO 2.0.0才添加这些功能。 KO 2中几乎没有什么重大变化。唯一让我难以忍受的是,在以前的版本中,事件处理程序接收到DOM事件对象作为第一个参数。在KO v2中,事件处理程序接收模型作为第一个参数,并将DOM事件对象作为第二个参数。您将需要更改任何使用DOM事件对象的KO代码来将其作为第二个参数进行解释。 // KO 1.2 myViewModel.myEventHandler =功能(EVT) // KO V2 myViewModel.myEventHandler =功能(数据,EVT) – 2011-12-31 20:23:08