代码之家  ›  专栏  ›  技术社区  ›  Golo Roden

使用Knockout.js掌握细节视图-如何更新Master?

  •  1
  • Golo Roden  · 技术社区  · 13 年前

    我正在使用Knockout.js处理主细节视图。基本上,一切都很好,但有一个小缺点:每当当前显示在细节视图中的项目发生更改时,主视图不会相应地更新自己。

    基本上,我理解为什么:

    • 主视图基于 ko.observableArray 并且因此它只跟踪插入和移除项目。它不会对更新的项目作出反应。
    • 无论何时选择一个项目,都会将其放入 ko.observable 这是细节视图的基础。
    • 局部视图一更新,阵列就会自动包含正确的数据(因为它使用的是同一个对象),但不会反映对UI的更改(因为没有插入或更新任何项目)。

    现在的问题是,如何以优雅和正确的方式处理这一问题?

    我目前可以想到两种可能的解决方案:

    • 将数组中的每个项包装成 ko.可观测 。这样,它将检测在详细信息视图中所做的任何更改,并相应地更新UI。
    • 或者:使用“复制”编辑的项目 JSON.parse(JSON.stringify(...)); replace() 具有克隆对象的数组中的条目。现在,一个对象已经在内部被移除和插入,数组检测到更改并更新UI。

    问题是:

    • 对于大量数据,第一种解决方案并不容易可行。至少它会减缓一切。
    • 第二种解决方案很好,但。。。嗯,嗯。。。根本不好;-)

    有更好的想法吗?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Mike Bild    13 年前

    IMHO-我不可能永远都知道所有的性能问题。你解释的第一个解决方案很简单,你想做什么就做什么。另一种可能的方法是将包含的标签重新绑定到ko.computed(…)。