我在使用 Knockout JS 时遇到了一个大问题。在我的视图模型中,我有一个名为 Method 的字段,它实际上是另一个视图模型。
这个视图模型可以是三种不同的事物之一(它被映射到域模型中的多态对象)。为了解决这个问题,我使用模板来检查在域模型中选择了哪种类型的方法,然后显示为该类型绑定数据的模板。
检查方法类型的函数如下所示:
this.getTemplate = function (data) {
var method = data.original.get_Method();
if (method instanceof MyProj.MethodA)
return "methodA";
else if (method instanceof MyProj.MethodB)
return "methodB";
else if (method instanceof MyProj.MethodC)
return "methodC";
}
我绑定模板的标记如下所示:
<div data-bind="template: {name: getTemplate($data), data: $data.Method}"></div>
这实际上非常有效,当我通过 UI 中的下拉菜单更改方法类型时,域模型会更新并显示正确的模板。然而,我的问题来了。每个模板都包含许多特定于每种方法类型的不同字段。每当我更改其中一个模板显示的视图模型中的一个值时,UI 都会闪烁,我认为这是因为模板再次被选中。这很烦人,看起来非常糟糕。
关于如何解决这个问题的任何想法?任何帮助将不胜感激!
提前致谢
/比约恩