Javascript KO找不到ID为的模板
我以前使用过敲除模板,所以我不确定为什么这对我不起作用。 我尝试了两种不同风格的ko标记,但都没有成功Javascript KO找不到ID为的模板,javascript,knockout.js,durandal,Javascript,Knockout.js,Durandal,我以前使用过敲除模板,所以我不确定为什么这对我不起作用。 我尝试了两种不同风格的ko标记,但都没有成功 <!-- more nesting levels --> <div class="cal-day-tps" data-bind="foreach: timePeriods"> <div class="cal-day-tp-cont"> <div data-bind="template: { name: 'tp-ed-templ
<!-- more nesting levels -->
<div class="cal-day-tps" data-bind="foreach: timePeriods">
<div class="cal-day-tp-cont">
<div data-bind="template: { name: 'tp-ed-templ', data: $data }"></div>
//both of these methods fail
<!-- ko template: { name: 'tp-ed-templ', data: $data } -->
<!-- /ko -->
</div>
</div>
<!-- /more nesting levels -->
<script type="text/html" id="tp-ed-templ">
<!-- bunch of markup -->
</script>
//这两种方法都失败了
我刚刚得到错误“找不到ID为tp ed temp的模板”
可能只是打字错误,但我一直找不到
- 我在Durandal的上下文中使用KO,尽管这不会有什么区别
- 尝试在使用前声明模板,但没有帮助
我在香草durandal设置中尝试了一些非常简单的案例,它仍然做同样的事情。甚至尝试将脚本放在与绑定相同的嵌套位置,没有骰子。简短的回答:您当前不能在Durandal内部使用敲除模板。 然而,正如所指出的,如果将命名模板放在Durandal之外,ko就能够找到它们。例如,
元素之外的任何位置
其他解决方法是使用Durandal的compose功能,或者只是以匿名方式内联模板
淘汰模板可能在不久的将来得到支持
我终于在Durandal google group上找到了这些答案
if
绑定来实现类似效果。)
//在标记中绑定到此文件:
//
vm.templateName=函数(){
返回vm.TemplateId();
};
//更改此选项将触发KO模板绑定中的可观察项;
//不要问我为什么我们必须将函数传递给“name”。。
vm.TemplateId=ko.observable(“存在的伪模板id”);
//附加视图后,正确的模板元素位于DOM中
//因此,我们可以触发模板(重新)绑定,它会找到它。
函数视图已附加(){
TemplateId(“真正的模板id”);
}
调用您的ko.applyBindings()
的位置在哪里?是的,我们可以看到更多的代码吗?JSFIDLE?在没有看到更多代码的情况下,我能想到的唯一一件事是在整个DOM加载并准备就绪之前调用绑定。如果您将命名模板放在Durandal之外的index.cstml中。它会起作用,KO可以在那里找到它。我之前也有同样的问题,并被建议仔细研究使用Durandal的ko.compose绑定来完成我的任务。我发现ko.compose满足了我的大部分模板制作需求,并且与Durandal的工作非常顺利。你只需指定一个模板名(我认为Durandal将其视为一个区域名),合成引擎就会加载html并将其绑定到当前模型。你是对的,先生,我错了。我不知道你不能在视图中使用模板。
// bind to this in markup:
// <div data-bind="template: {name: $root.templateName, .. }">
vm.templateName = function () {
return vm.TemplateId();
};
// Changing this will trigger an observable in the KO template binding;
// don't ask me why we have to pass in a function to 'name' ..
vm.TemplateId = ko.observable("dummy-template-id-that-exists");
// After the view is attached the correct template element is in the DOM
// so we can trigger the template to (re-)bind and it will find it.
function viewAttached () {
vm.TemplateId("the-real-template-id");
}