0

我无法在 KnockoutJS 中创建依赖于属性的创建/编辑视图。

事情是这样的:我创造的一切都是“人”——可能是医疗保健专业人员、水管工、机械师或工程师。根据人的种类/类型,我需要输入不同的数据。

这里有一个例子:

Healthcare Professional: Name, Telephone, Hospital, etc.
Plumber: Name, Telephone, Crafts, etc.
Engineer: Name, Telephone, Specialities, etc.

能做的是在我的 ViewModel 上创建属性,例如“showCity”、“showHospital”等,以隐藏各个表单字段。

但是,为了区分,我想使用完全不同的形式:同样,我可以将相应的形式设置为仅显示条件是否满足。

但是,我希望 KnockoutJS呈现应使用的相应表单(Person 的类型始终在首次创建时确定 - 它无法更改)。

我最终没有做的是显示一种形式,并且有十种形式(和数据绑定)但隐藏。

我尝试像这样使用“if”绑定:<div data-bind="with: $root.selectedPerson"><form data-bind="if: $data.type='mathematician'"></form></div>,但无济于事。

有人知道在这种情况下最佳做法是什么吗?

4

1 回答 1

0

您的if绑定是设置$data.type值,而不是比较它。尝试:

<div data-bind="with: $root.selectedPerson"><form data-bind="if: $data.type() === 'mathematician'"></form></div>

虽然这很好,但我总是尽量避免在我的数据绑定标记中使用代码。我会尝试创建一个计算结果,它会返回比较结果的真/假,但在您的情况下,您需要为每种类型的人创建一个,这会变得很棘手。为此,我会求助于模板。你可以这样做:

<div data-bind="template: { name: $root.selectedPerson().type, data: $root.selectedPerson }"></div>
<script type="text/html" id="mathematician">...</script>
<script type="text/html" id="plumber">...</script>

*注意:从 KO 版本 2.3.0 开始,绑定的name属性template可以接受 observables。如果您使用的是以前的版本,请务必在绑定中调用 observable:name: $root.selectedPerson().type()

于 2013-09-10T14:53:31.817 回答