Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RenderPartial忽略周围的淘汰foreach_Javascript_Asp.net_Knockout.js - Fatal编程技术网

Javascript RenderPartial忽略周围的淘汰foreach

Javascript RenderPartial忽略周围的淘汰foreach,javascript,asp.net,knockout.js,Javascript,Asp.net,Knockout.js,我正在尝试使用ASP.net、knockout和javascript的组合呈现一个交互式树。树中的每个节点都有一个“项”列表和一个“组”列表,其中每个“组”是另一个节点。以下是每个节点最简单形式的HTML(这是_GroupView.cshtml,因此是递归的): @{Html.RenderPartial(“_ItemView”);} @{Html.RenderPartial(“_GroupView”);} +项目 +团体 AddItem和addGroup将新的javascr

我正在尝试使用ASP.net、knockout和javascript的组合呈现一个交互式树。树中的每个节点都有一个“项”列表和一个“组”列表,其中每个“组”是另一个节点。以下是每个节点最简单形式的HTML(这是_GroupView.cshtml,因此是递归的):


  • @{Html.RenderPartial(“_ItemView”);}
  • @{Html.RenderPartial(“_GroupView”);}

+项目 +团体
AddItem和addGroup将新的javascript视图模型添加到childItems和childGroups列表中,然后这些列表应通过foreach绑定绑定到RenderPartial创建的视图。这对项目非常有效,但组存在问题

我看到一个问题,在加载时,这个页面忽略了knockout foreach,并且始终调用renderparties,即使childItems和childGroups列表为空。这将导致_groupview的无限递归和StackOverflowException


为什么foreach被忽略了?RenderPartial是否总是被调用一次,即使它位于条件表达式中?

是的,将始终调用
RenderPartial
语句,因为这些语句在服务器端展开。敲除
foreach
在客户端处理

也许您可以在
foreach
循环中使用模板:()

<div>
    <ul id="siblingList" data-bind="foreach: childItems">
        <li>
            @{ Html.RenderPartial("_ItemView"); }
        </li>
    </ul>
    <ul id="groupList" data-bind="foreach: childGroups">
        <li>
            @{ Html.RenderPartial("_GroupView"); }
        </li>
    </ul>
    <br/>
    <button data-bind="click: addItem">+ Item</button>
    <button data-bind="click: addGroup">+ Group</button>
</div>