5

我有一系列可观察到的活动,其中包含审计和评论。我从服务器获取数据并根据对象的时间戳对活动数组进行排序。

我希望能够根据类型有条件地显示 html,因此审核和评论看起来会有所不同。

<!-- ko foreach: activities -->
<div class="audit" data-bind="visible: {activity is typeof Audit}"> 
    @*Do some audit html*@
</div>
<div class="comment" data-bind="visible: {activity is typeof Comment}"> 
    @*Do some comment html*@
</div>
<!-- /ko -->

我有以下 html,但我不知道条件如何,我只是在上面写了一些东西作为占位符,这样你就知道我想要实现的目标了。

我可能正在接近这一切都是错误的,非常感谢任何帮助!

4

2 回答 2

3

如果您将可见绑定更改为 if 绑定,Nayjest 的解决方案应该可以工作 - 这样它就不会尝试渲染具有标题依赖项的部分。

然而,更好的解决方案可能是拥有两个模板并根据类型执行它们。您可以在 VM 上使用一个方法来获取 $data 并返回,例如,“auditTemplate”或“commentTemplate”,具体取决于 $data instanceof Audit 之类的结果。然后,您将嵌入两个模板作为具有这些 id 的脚本标签:

<script id="auditTemplate" type="text/html">
<div class="audit">
<!-- Do some audit stuff -->
</div>
</script>

<script id="commentTemplate" type="text/html">
<div class="comment">
<!-- Do some comment stuff -->
</div>
</script>

然后在你的虚拟机中,你会有类似的东西:

this.getTemplate = function(data) {
return (data instanceof Audit) ? 'auditTemplate' : 'commentTemplate'
}

在您页面的 html 中,您可以执行以下操作:

<!-- ko foreach: activities -->
<div databind="template: {name:$parent.getTemplate($data), data: $data}"></div>
<!-- /ko -->
于 2012-06-14T14:42:27.953 回答
2

如果您有在视图模型的全局范围和属性“活动”中可见的审计类,请尝试以下操作:

<div data-bind="foreach: activities">
   <div data-bind="visible: $data instanceof Audit">
       <h1 data-bind="text: $data.title"></h1>
       <!-- Some other data here -->
   </div>
</div>
于 2012-06-13T15:43:46.623 回答