gpt4 book ai didi

templates - 带 knockout 的动态模板

转载 作者:行者123 更新时间:2023-12-01 02:33:39 25 4
gpt4 key购买 nike

我有一个 View 模型,当我的应用程序状态发生变化时,我想在运行时动态更改其模板。我提到了这个link
在提出我的解决方案时。

在我的 html 页面中,我有一个绑定(bind)到 View 模型列表的 div:

<div class="app" 
data-bind="template: {name: templateSelector, foreach: viewModelBackStack}">
</div>

我的 templateSelector 方法如下所示:
this.templateSelector = function(viewModel)
{
if (!_itemTemplate)
{
_itemTemplate = ko.computed(function() {return this.template();}, viewModel);
}

return _itemTemplate();
}

var _itemTemplate;

可以看出,我正在构建一个计算的 observable,它返回 viewModel 的模板。

我的 View 模型如下所示:
function MyViewModel
{
this.template = ko.observable("MyTemplate");
}

由于完成了 ajax 调用,我正在更改模板的值,并且我看到计算的 observable 也被正确调用(我在其中放置了一个警报以验证它),但是 html 中的绑定(bind)不会更新模板我的 View 模型。任何帮助将不胜感激。

更新:我发现了导致它不起作用的错误。基本上我在包含 knockout.js 之前包含了 jquery.tmpl 插件。删除 jquery.tmpl 就成功了!

最佳答案

我没有看到您的代码有问题,除非它位于您更新模板 observable 作为 AJAX 调用的结果的部分。确保您有对 View 模型的引用并将其设置为可观察的 vm.template(newValue);而不是重新创建可观察的。

这是您的代码工作:http://jsbin.com/ipijet/5/edit#javascript,html,live

需要注意的一点是绑定(bind)已经在计算的 observable 的上下文中执行,因此没有必要在 templateSelector 中创建自己的绑定(bind)。功能。

您可以简单地创建一个直接返回您的 observable 的函数,例如:

this.getTemplate = function(data) {
return data.template();
};

http://jsbin.com/ipijet/3/edit#javascript,html,live

这是我不久前写的一篇关于这个主题的文章: http://www.knockmeout.net/2011/03/quick-tip-dynamically-changing.html

关于templates - 带 knockout 的动态模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11525460/

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