【发布时间】:2019-03-22 18:00:11
【问题描述】:
OP 说明: 我不是在询问内置的淘汰赛延迟设置,除非可以通过某种方式对其进行操作
我有一个应用程序,它加载了所有可能的屏幕并最初绑定到视图模型。视图模型上的属性之一控制用户可以看到哪些“屏幕”。
出于纯粹的病态好奇心,我想知道是否有一种内置的或相对简单的方法来告诉 knockout 停止操作 DOM 的某些部分,“仅当 X 属性等于此值时才更新此块”。甚至更好 - 如果在 KO 中关闭此元素的可见性,则不要操作任何子元素。
最终结果将是不可见的“屏幕”不会更新,而视图模型上的可观察对象仍将在后台执行它们的操作。然后当屏幕发生变化时,该新可见屏幕的 DOM 将被更新。
许多屏幕使用相同的 observables,所以我认为不经常重新操作 DOM 可能会提高性能 - 例如更新当前对用户不可见的 HTML 列表同时弄乱另一个屏幕中的设置。
或者性能优势可以忽略不计,因为浏览器不会重绘隐藏元素。你可以告诉我很多。
运行 KnockoutJS 3.4.x,如果这很重要。
【问题讨论】:
-
完全忽略 javascript,浏览器很难确定什么是“可见的”。 Z-Index、Opacity、Transforms、Display、Visibility,我的意思是有很多方法可以隐藏某些东西,在没有浏览器帮助的情况下试图弄清楚这一点几乎是不可能的。唯一的好方法是让您根据逻辑 UX 跟踪应该绑定和不绑定的内容。
-
@ErikPhilips 使用敲除可见属性绑定,因此它会保持一致并与敲除知道的东西相关联,而不是试图根据 css/html/viewport/etc 确定当前对用户的可见性。
标签: javascript knockout.js knockout-3.0