Javascript 显示带敲除的条件html

Javascript 显示带敲除的条件html,javascript,html,knockout.js,coffeescript,Javascript,Html,Knockout.js,Coffeescript,我有一系列的活动,包括审计和评论。我从服务器获取了数据,并根据对象的时间戳对活动数组进行了排序 我希望能够根据类型有条件地显示html,这样审核和注释看起来就不同了 <!-- ko foreach: activities --> <div class="audit" data-bind="visible: {activity is typeof Audit}"> @*Do some audit html*@ </div> <div class=

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

我希望能够根据类型有条件地显示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审计*@
@*对html做一些评论*@
我有下面的html,但我不知道如何做的条件,我只是写了一些在上面作为占位符,所以你知道我要实现的想法


我可能处理这一切都错了,非常感谢任何帮助

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

<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>

如果您将可视绑定更改为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>
在页面的html中,您可以执行以下操作:

this.getTemplate = function(data) {
return (data instanceof Audit) ? 'auditTemplate' : 'commentTemplate'
}
<!-- ko foreach: activities -->
<div databind="template: {name:$parent.getTemplate($data), data: $data}"></div>
<!-- /ko -->


我认为
data bind=“visible:{activity.hasOwnProperty()}”
可以工作,但是你能提供一个JS提琴用于测试吗?我以前从未使用过JS提琴,但我会尝试使用JS提琴,然后作为编辑添加。您好,这很好,但不幸的是它仍然解析内部元素。所以,如果它是一条注释,它仍会尝试运行$data.title,但由于注释没有title属性而失败。我正转向使用模板。也许考虑使用IF绑定而不是可见绑定:这样,内部绑定不会被应用,直到条件是真的。