我正在使用Knockout.js处理主细节视图。基本上,一切都很好,但有一个小缺点:每当当前显示在细节视图中的项目发生更改时,主视图不会相应地更新自己。
基本上,我理解为什么:
-
主视图基于
ko.observableArray
并且因此它只跟踪插入和移除项目。它不会对更新的项目作出反应。
-
无论何时选择一个项目,都会将其放入
ko.observable
这是细节视图的基础。
-
局部视图一更新,阵列就会自动包含正确的数据(因为它使用的是同一个对象),但不会反映对UI的更改(因为没有插入或更新任何项目)。
现在的问题是,如何以优雅和正确的方式处理这一问题?
我目前可以想到两种可能的解决方案:
-
将数组中的每个项包装成
ko.可观测
。这样,它将检测在详细信息视图中所做的任何更改,并相应地更新UI。
-
或者:使用“复制”编辑的项目
JSON.parse(JSON.stringify(...));
和
replace()
具有克隆对象的数组中的条目。现在,一个对象已经在内部被移除和插入,数组检测到更改并更新UI。
问题是:
-
对于大量数据,第一种解决方案并不容易可行。至少它会减缓一切。
-
第二种解决方案很好,但。。。嗯,嗯。。。根本不好;-)
有更好的想法吗?