Data binding 将可见性绑定到敲除中的表达式

Data binding 将可见性绑定到敲除中的表达式,data-binding,knockout.js,Data Binding,Knockout.js,我有一系列的图像,我只想一次看到一个,基于我的viewModel上的可观察属性 我想要的是这样的: <img src="a.jpg" data-bind="visible: type == 'a'" /> <img src="b.jpg" data-bind="visible: type == 'b'" /> <img src="c.jpg" data-bind="visible: type == 'c'" /> ... viewModel.isA = k

我有一系列的图像,我只想一次看到一个,基于我的viewModel上的可观察属性

我想要的是这样的:

<img src="a.jpg" data-bind="visible: type == 'a'" />
<img src="b.jpg" data-bind="visible: type == 'b'" />
<img src="c.jpg" data-bind="visible: type == 'c'" />

...
viewModel.isA = ko.dependentObservable(function(){
    return this.type() == 'a';
}, viewModel);

这是可行的,但它使我的代码变得相当大。我觉得表达式绑定应该可以工作,而且我可能只是稍微修改了一下语法。有没有一种干净的方法可以做到这一点?

当访问一个非平凡的敲除
数据绑定
表达式中的数据时,您需要将可观测值作为函数调用,以获取基础值:

<img src="a.jpg" data-bind="visible: type() == 'a'" />
<img src="b.jpg" data-bind="visible: type() == 'b'" />
<img src="c.jpg" data-bind="visible: type() == 'c'" />


但是,如果在
数据绑定
属性中使用大量非平凡表达式,则最好创建一个属性。

Sean关于绑定中类型语法的回答是正确的

但是,如果您担心创建的DependentToServable太多,并且不希望在绑定中使用完整的表达式,那么可以使用简单的函数。KO绑定在DependentToServables内部执行,因此任何被访问的可观察对象都将为该绑定创建一个依赖项。这意味着您可以创建如下函数:

viewModel.isType = function(type) {
  return type === this.type();
};
然后您可以像这样使用它:(该绑定也被称为
visible
,而不是
visibility



这是一个例子:

我发誓我试过,但我一定做错了什么。这确实有效。我不知道为什么当我尝试“clip.kind()==xx”时它对我不起作用。但是当我尝试在父元素中使用:clip和在子(当前)元素中使用
kind()='xx'
时,它就起作用了,我喜欢它。这对于每个绑定来说都比表达式方法好一点。对不起,我的实际源代码有visible属性,我只是在问题中输入了错误。
<img src="a.jpg" data-bind="visible: isType('a')" />
<img src="b.jpg" data-bind="visible: isType('b')" />
<img src="c.jpg" data-bind="visible: isType('c')" />