KnockoutJs和模板 - Visual Studio中没有代码突出显示/完成?

时间:2011-10-04 12:05:25

标签: javascript jquery visual-studio-2010 knockout.js

我一直在玩淘汰网站上的教程,并乐于使用它。

所以我决定用它制作一个简单的网站。我很遗憾地注意到在使用javascript模板时,我失去了IDE的大量支持(突出显示,代码完成)

示例模板:

<script type="text/html" id="taskTemplate">
    <li>
        <input type="checkbox" data-bind="checked: isDone" />
        <input data-bind="value: title, enable: !isDone()" />
        <a href="#" data-bind="click: remove">Delete</a>
    </li>
</script>

这是你必须吞下的东西还是可以避免/可修复的东西? 模板似乎是构建页面最常用的方法之一,所以我更愿意得到IDE的支持。

4 个答案:

答案 0 :(得分:9)

为了解决这个问题,我创建了两个html助手,用于开始我的脚本标记和脚本标记的结尾。类似的东西:

<% Html.BeginTemplate(new { id = "features-template" }); %>
    <li>
        <input type="checkbox" data-bind="checked: isDone" />
        <input data-bind="value: title, enable: !isDone()" />
        <a href="#" data-bind="click: remove">Delete</a>
    </li>
<% Html.EndTemplate(); %>

答案 1 :(得分:5)

基思提出了非常好的智能解决方案。不过我想让你知道KO 1.3有本机模板引擎。通过新的绑定可以实现:

  • 如果
  • 如不方便
  • 的foreach!

你可以在Steve Sanderson的宣布中阅读更多内容:http://blog.stevensanderson.com/2011/08/31/knockout-1-3-0-beta-available/(1。控制流绑定)

所以你的例子会有这样的表现:

<ul data-bind="foreach: tasks">
<li>
    <input type="checkbox" data-bind="checked: isDone" />
    <input data-bind="value: title, enable: !isDone()" />
    <a href="#" data-bind="click: remove">Delete</a>
</li>
</ul>

答案 2 :(得分:1)

停止Visual Studio的<script type="text/html"...>标记将标记的这一部分突出显示为html。因此,这个问题/答案似乎是你最接近答案的答案。

Visual Studio - Markup syntax highlighting inside script[type:txt/html]

答案 3 :(得分:0)

我在这里使用了接受的答案,因为它帮助了我,如果有人想要实际的代码,请转到:

public string StartTemplate(string id)
{
    return ("<script type=\"text/html\" id=\"" + id + "\">\r\n");
}

public string EndTemplate()
{
    return ("</script>\r\n");
}

HTML:

<%= StartTemplate("WidgetTemplate")%>
 ...actual template HTML goes here...
<%= EndTemplate() %>