如果 a 的索引与单击的标签div
不匹配,则尝试“禁用” a :a
<div data-bind="foreach: slides" class="slidebtns">
<a class="slidebtn" data-bind="text: title, click: $parent.activeIndex.bind($data, $index())" href="#"></a>
</div>
<div data-bind="foreach: slides">
<div class="screen" data-bind="attr: { id: title }, disable: $parent.activeIndex() !== $index">
<div>test</div>
</div>
</div>
CSS:
... .disabled {
display: none;
}
JS:
function viewModel() {
var self = this;
self.activeIndex = ko.observable(0);
self.numSlides = ko.observable(3);
...
self.slides = ko.computed(function() {
var arr = [], n;
if (self.numSlides()<6) n = self.numSlides();
else n = 5;
for (var i=0; i<n; i++) {
arr.push(slideModel(i));
}
return arr;
});
}
function slideModel(n) {
var self = this;
self.includeImage = ko.observable(true);
self.imageSrc = ko.observable('slide_bg1.jpg');
return { title: 'slide'+(n+1) };
}
ko.applyBindings(new viewModel());
这是行不通的。每个人都会div
接受一disabled
堂课。
作为测试,我将最后一个 div 更改为以下内容,以确保 activeIndex 在单击时实际正确更新(确实如此):
<div class="screen" data-bind="attr: { id: title }, css: $root.activeIndex() !== $index ? 'disabled' : ''">
<div data-bind="text: $root.activeIndex()"></div>
</div>
但是,我对 KO 来说太陌生了,无法弄清楚如何在a
单击 .slidebtn 时额外输出屏幕 $index 所以我实际上可以检查索引是否相等(无论如何,它们应该相等,因为每个元素只有 3 个在容器内输入)。