javascript - 使用 Knockout 显示条件 html

标签 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="comment" data-bind="visible: {activity is typeof Comment}"> 
    @*Do some comment html*@
</div>
<!-- /ko -->

我有以下 html,但我不知道条件如何,我只是在上面写了一些内容作为占位符,以便您了解我要实现的目标。

我可能处理这一切都是错误的,非常感谢任何帮助!

最佳答案

如果您将可见绑定(bind)更改为 if 绑定(bind),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>

然后在您的 VM 中,您将拥有如下内容:

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

关于javascript - 使用 Knockout 显示条件 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018408/

相关文章:

javascript - Knockoutjs 不更新 View 模型

javascript - 正则表达式在第一个字符后强制使用单个空格

javascript - 添加,使用Javascript函数添加多个文本框

javascript - jQuery - 隐藏前等待 2 秒

javascript - html5 将 <div> 拖放到相应位置

javascript - Durandal JS knockout 延迟更新

javascript - 最近表的最近表

javascript - 使用 JS/jQuery 从 URL 中删除哈希值

javascript - PHP minifiying HTML - 跳过阅读 JavaScript 代码和 CSS?

knockout.js 如何初始化tinymce?