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

时间:2012-09-24 12:22:07

标签: knockout.js master-detail

我正在使用Knockout.js处理主详细信息视图。基本上,一切都运行正常,有一个小缺点:每当更改详细视图中当前显示的项目时,主人不会相应地更新自己。

基本上,我理解为什么会这样:

  • 主视图基于ko.observableArray,因此它只跟踪插入和删除项目。它不会对更新的项目做出反应。
  • 每当选择一个项目时,它都会被放入ko.observable,这是详细视图的基础。
  • 一旦更新了详细视图,阵列就会自动包含正确的数据(因为它使用的是同一个对象),但它不会反映对UI的更改(因为没有插入或更新任何项目) )。

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

我现在可以想到两种可能的解决方案:

  • 将数组中的每个项目包裹在ko.observable中。这样,它将检测详细信息视图中所做的任何更改并相应地更新UI。
  • 或者:使用JSON.parse(JSON.stringify(...));replace()使用克隆对象“复制”编辑的项目。由于现在已删除并在内部插入对象,因此阵列会检测更改并更新UI。

问题:

  • 对于大量数据,第一种解决方案并不容易实现。至少它会减慢一切。
  • 第二个解决方案很好,但是......嗯,好吧,......根本不好; - )

有更好的想法吗?

1 个答案:

答案 0 :(得分:1)

恕我直言 - 我不可能永远不会知道所有的表现问题。您解释的第一个解决方案很简单,可以做您想做的事。另一种可能的方法是将包含标签的重新绑定到ko.computed(...)。