KO无法找到ID模板(KO cannot find template with ID)

2019-08-18 04:11发布

我以前用过淘汰赛的模板,所以我不知道为什么,这不是为我工作。 我尝试了两种不同风格的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', 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-TEMPL模板”。

可能只是一个错字,但我一直没能找到它。

  • 我在迪朗达尔的环境中使用KO,但是这不应该有所作为。
  • 试图声明使用前的模板,并没有帮助。
  • 别人跑进无解同样的事情无论是

这似乎是一个迪朗达尔问题,而不是淘汰赛

我试着在香草迪朗达尔设置了一些非常简单的情况下,它仍然做同样的事情。 甚至试图把脚本的同一位置嵌套的绑定,没有骰子。

Answer 1:

答案很简单:您目前仍无法使用淘汰赛模板迪朗达尔 。 然而,随着nemesv指出的那样,如果你把你的命名模板迪朗达尔之外,KO能够找到他们。 例如,的以外的任何地方<div id="applicationHost"></div>元素。

其他的解决方法是要么使用Durandal的撰写功能,或者只是内联模板作为匿名。

淘汰赛的模板可能会在不久的将来得到支持。

我终于挖出这些答案上来就迪朗达尔谷歌组,

  • 混合淘汰赛模板与迪朗达尔撰写
  • 淘汰赛找不到的意见模板内


Answer 2:

问题是,KO模板元素必须在DOM存在迪朗达尔视图绑定之前。 这是因为它被插入到DOM 之前,所以任何包含模板无法通过ID解决的视图绑定。

使用返回可观察到的一个功能,可用于以后再次触发模板结合..它的工作原理,但靠不住的。 (安if结合可以用于类似的效果)。

// 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");
}


文章来源: KO cannot find template with ID