什么是被用于data-target
?我认为你首先不需要这样做。
如果你想切换一个部分,我建议使用更自然的方式来解决这个问题。在敲除的情况下,这意味着:编写一个封装你想要的行为的绑定处理程序。
用最简单的术语表达:你想点击某个东西,它应该切换其他东西。例如下面的可见性<h1>
要做的最简单的事情是:切换CSS类并使用它来影响可见性。
这是一个绑定处理程序,可以打开和关闭CSS类。与最简单的CSS一起,您可以获得折叠/展开行为。
ko.bindingHandlers.toggleClass = {
init: function (element, valueAccessor) {
ko.utils.registerEventHandler(element, 'click', function() {
var cssClass = valueAccessor(),
shouldHaveClass = element.className.indexOf(cssClass) < 0;
ko.utils.toggleDomNodeCssClass(element, cssClass, shouldHaveClass);
});
}
}
ko.applyBindings({
categories: [
{title: 'Category A'},
{title: 'Category B'},
{title: 'Category C'},
{title: 'Category D'}
]
});
.collapsed+.collapse {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<ul data-bind="foreach: categories">
<li>
<a href="#" data-bind="text: title, toggleClass: 'collapsed'"></a>
<div class="collapse">
<h1>Some text</h1>
</div>
</li>
</ul>
当然你也可以使用各种更先进的技术,但原则将保持不变。定义行为,通过绑定处理程序将该行为附加到元素。
感谢快速response.I编辑如下: 但是,得到的错误消息: knockout.js:68Uncaught语法错误:无法处理的结合“的foreach:功能(){返回{数据:类别,如:“类'}} – user2355793
你的viewmodel中是否存在'categories'? –
是的,它工作正常 – user2355793