0

我认为这将是一件简单的事情,但我基本上有一个可观察的对象数组,其中包含如下数据:

{
   BasicType: "some-type",
   ExtendedType: "some-extended-type",
   DisplayType: "some-display-type"
}

数据字段始终在模型中,如果没有数据可以显示,它们将是空字符串。

现在这个模型在整个系统中使用,是一个简单的 POJO,视图模型只包含其中的许多,当视图中需要它们时。因此,我不想将任何特定于视图的问题放在“this”对象上,但是可以将它们放在由许多这些较小模型组成的视图模型中。

无论如何,在视图中添加了所有字段,但如果有更适用的类型可用,则每个字段都有一个 if 来禁用它。所以一个例子是这样的:

<div data-bind="text: BasicType, if: (BasicType && !ExtendedType && !DisplayType)"/>
<div data-bind="text: ExtendedType, if: (!BasicType && ExtendedType && !DisplayType)"/>
<div data-bind="text: DisplayType, if: (!BasicType && !ExtendedType && DisplayType)"/>

但是由于某种原因,它并没有像我预期的那样做,我尝试更改!xTypeforxType == ''但是也没有这样的运气,并且还使用括号强制评估但没有。那么我是否遗漏了一些东西,或者如果不处理多个元素,knockoutjs 可以吗?

如果有一种简单的方法,我很乐意将这些转换为计算的 observables,但是由于这些模型用于跨页面并作为与 web 服务的合同(它们就像数据层)我不想更改它们,并且我不知道如何将计算值添加到对象中,除非当我得到它们时,我循环每个对象,然后将计算的 observables 添加到每个对象中,然后使用它。

无论如何,情况就是这样,任何建议都会很棒!

4

1 回答 1

1

如果模型属性不是可观察的,您的代码将起作用。如果模型属性是可观察的,则需要在比较之前执行可观察以访问这些值。

<div data-bind="foreach: types">
    <div data-bind="text: BasicType, if: (BasicType() && !ExtendedType() && !DisplayType())"></div>
    <div data-bind="text: ExtendedType, if: (!BasicType() && ExtendedType() && !DisplayType())"></div>
    <div data-bind="text: DisplayType, if: (!BasicType() && !ExtendedType() && DisplayType())"></div>
</div>

这是一个例子:http: //jsfiddle.net/5WMVb/1/

于 2013-03-19T12:26:00.880 回答