Dotvvm Repeater嵌套在Repeater中

时间:2017-07-17 07:45:47

标签: dotvvm

我喜欢在一个dothtml中使用2点:repeater(s) 例如:

<dot:Repeater DataSource="{value: Projects}">
    <div class="project">
        <dot:LinkButton Click="{command: _root.RedirectToTasks(Id)}">{{value: Title}}</dot:LinkButton>
        <dot:Repeater DataSource="{value: _parent.Tasks}" WrapperTagName="table">
            <ItemTemplate>
                <tr>
                    <td>{{value: Title}}</td>
                    <td>{{value: Completed ? ("Finished: " + CompletionDate) : "Not yet"}}</td>
                    <td>
                        <dot:LinkButton Text="Done"
                                        Click="{command: CompleteTask()}"
                                        Visible="{value: !Completed}" />
                    </td>
                </tr>
            </ItemTemplate>
        </dot:Repeater>
    </div>
</dot:Repeater>

我为_parent尝试了不同的选项。在任务部分,但我没有让它工作。在其他框架中,可以为主中继器添加别名 例如:&#39; DataSource =&#34; {value:Projects}&#34;作为项目&#39;然后它可以在嵌套转发器中使用&#39; DataSource =&#34; {value:project.Tasks}&#34;&#39;有人知道如何使这个工作吗?

1 个答案:

答案 0 :(得分:1)

在内部Repeater中,您只能使用{value: Tasks},或{value: _this.Tasks}

代码中还有第二个警告:如果您没有RenderWrapperTag="table"元素,则tbody不是一个好主意。某些浏览器会尝试添加缺少的tbody,并且可能会破坏DOM结构并导致Repeater停止工作。

通常,您希望将Repeater放在<table>元素中并使用RenderWrapperTag="tbody"

<table>
    <dot:Repeater DataSource="{value: Tasks}" WrapperTagName="tbody">
        <ItemTemplate>
            <tr>
                <td>{{value: Title}}</td>
                <td>{{value: Completed ? ("Finished: " + CompletionDate) : "Not yet"}}</td>
                <td>
                    <dot:LinkButton Text="Done"
                                    Click="{command: CompleteTask()}"
                                    Visible="{value: !Completed}" />
                </td>
            </tr>
        </ItemTemplate>
    </dot:Repeater> 
</table>