gpt4 book ai didi

javascript - knockout : dynamic content and applyBindings

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:50:14 26 4
gpt4 key购买 nike

我像这样“动态地”填充我的页面:

<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>
!

View 模型:

var viewModel = {
myContents: ko.observableArray([]),
complete: function() {
viewModel.myContents.push({
contentTemplate:'fooTemplate',
contentData:{barAttribute:'world'}});
}
};

ko.applyBindings(viewModel);

一个特点是模板名称是动态的。它似乎是这样工作的(你可以在 http://jsfiddle.net/hPQNx/ 上尝试),但我想知道我是否做对了。某些模板功能(如 root 或 parent)似乎不起作用。

我应该在某个时候手动重新调用 applyBindings 吗?我已经看到这必须在相关的 DOM 节点上完成,但我如何才能在我的设置中访问这些节点?

最佳答案

我向您的 View 模型添加了一个属性,并展示了如何添加一个根属性并使用 $root 引用它,并且 $parent 可以在这个 fiddle 中工作。

var viewModel = {
a: ko.observable('foo'),
myContents: ko.observableArray([]),
complete: function() {
viewModel.myContents.push({
contentTemplate: 'fooTemplate',
b: 'goo',
contentData: {
barAttribute: 'world'
}
});
}
};

ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.0.0/knockout-min.js"></script>
<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>
<div data-bind="text: $root.a"></div>
<div data-bind="text: $parent.b"></div>
</script>

<button data-bind="click: complete">complete</button>

Hello
<span data-bind="template: { name: 'ContainerTemplate', foreach: myContents }"></span>
!

关于javascript - knockout : dynamic content and applyBindings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com