2011-04-23 102 views
3

我试图嵌套一些jQuery模板。我知道jQuery有我可以使用的{{tmp语法,但是这对我来说不起作用,因为我需要使用淘汰赛的foreach模板。正如你在下面看到的,我有一个绑定到第一个脚本标签的div。这是我的第一个模板,使用knockout的foreach语法来遍历可观察的消息数组。在那个模板里面,我试图把另一个div绑定到另一个使用knockout的foreach循环遍历'messages'数组中每个成员的数组的模板。它不工作。我得到的JavaScript错误(如“预期的标识符”)。任何想法我做错了什么?巢淘汰赛foreach模板

 <div data-bind="template: {name: 'contactIMSTemplateContent', foreach:messages}"></div> 
<script id="contactIMSTemplate" type="text/html"> 
    <span class="tabTop">${viewModel.contacts()[$data.contact].name()}</span> 
</script> 
      <script id="contactIMSTemplateContent" type="text/html"> 
    <div class="tabContentIM" > 
    <div data-bind="template: {name:'IMSTemplate', foreach:${viewModel.messages()[$data.contact].ims}}" ></div> 

    </div> 
      </script> 
<script id="IMSTemplate" type="text/html"> 

     <div class="message"><span class="messageFrom">${viewModel.contacts()[0].name()}</span> ${$data}</div> 
</script> 

我的视图模型看起来像:

var viewModel = { 
    contacts: ko.observableArray([new contact("Contact Name", "contact status", "busy", "[email protected]", "url")]), 
    messages: ko.observableArray([{ 
     contact: 0, 
     ims: new ko.observableArray(["chat"]) 
    }]) 
}; 
+0

你可以发布你的viewModel的样子吗? – 2011-04-23 21:10:06

+0

哎呀,忘了。在这里: VAR视图模型= {联系人:ko.observableArray([新联系人( “联系人姓名”, “联系人状态”, “忙碌”, “[email protected]”, “URL”)),\t消息:KO .observableArray([{contact:0,ims:new ko.observableArray([“chat”])}]) \t};如果可能的话, – 2011-04-23 21:17:40

+0

可能会编辑问题并添加它。 – 2011-04-23 21:20:31

回答

6

我不知道您的视图模型看起来完全像什么,但此行会导致一个问题:

<div data-bind="template: {name:'IMSTemplate', foreach:${viewModel.messages()[$data.contact].ims}}" ></div>

里面的数据绑定,你可以直接使用变量,不需要使用${语法。此外,在属性的末尾有一个}},这将导致jQuery模板插件尝试将其解析为标签。如果您需要在数据绑定中放置两个大括号,则只需在它们之间放置一个空格即可使用。

+0

感谢一堆!没有意识到我不需要$ {。刚刚为我节省了几个小时毫无意义的调整。谢谢! – 2011-04-23 21:23:52