0

我在使用 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 都会闪烁,我认为这是因为模板再次被选中。这很烦人,看起来非常糟糕。

关于如何解决这个问题的任何想法?任何帮助将不胜感激!

提前致谢

/比约恩

4

1 回答 1

0

您是否在 getTemplate 函数中使用了任何 observable。更新该 observable 的值会使模板重新渲染并获得 Flash 效果。

查看此链接部分:“注 5:动态选择使用哪个模板”。

于 2012-08-09T11:12:00.603 回答