是否可以延迟加载 xpage 上的某些控件?
这就是问题所在:假设您有一个执行全文本搜索并在重复控件中显示结果的控件。此 ft 搜索可能需要很长时间,并且将网页加载处于等待状态,直到搜索结果准备好。
我希望我的页面最初加载大部分数据,并且应该在初始加载后将一些“耗时”的控件作为单独的请求加载到页面中。
这样用户会立即看到网页,但是页面上的一些数据会稍后加载,而不会使网页处于等待服务器的状态。
可能的?
是否可以延迟加载 xpage 上的某些控件?
这就是问题所在:假设您有一个执行全文本搜索并在重复控件中显示结果的控件。此 ft 搜索可能需要很长时间,并且将网页加载处于等待状态,直到搜索结果准备好。
我希望我的页面最初加载大部分数据,并且应该在初始加载后将一些“耗时”的控件作为单独的请求加载到页面中。
这样用户会立即看到网页,但是页面上的一些数据会稍后加载,而不会使网页处于等待服务器的状态。
可能的?
使用渲染的缺点是所有值绑定仍然会计算,即使相应的标记没有发送到页面。所以这里的诀窍是确保组件在你想要它们之前甚至不存在。
每个组件都有一个 getChildren() 方法。这将返回一个可变的组件列表,其中有一个 add() 方法。这允许您在页面加载时或稍后在事件期间动态地将组件添加到页面。出于您尝试执行的操作的目的,您可能希望将添加“昂贵”组件的时间推迟到后续事件。
创建一个直接附加到视图根 () 的事件处理程序,给它一个唯一的 ID(例如“loadExpensiveComponentsEvent”,将其刷新模式设置为部分刷新,将刷新 ID 设置为包含搜索结果的任何 div 或面板,并设置其事件名称为任意事件(例如“loadExpensiveComponents”)。这可以防止您的事件被实际用户行为触发。将事件的代码设置为将注入您的组件的 SSJS。
然后添加一个脚本块()来触发页面加载后的事件:
XSP.addOnLoad(function(){ XSP.firePartial(null, "#{id:loadExpensiveComponentsEvent}"); });
您的页面将在没有搜索结果组件的情况下加载。一旦页面完全加载,它将自动触发组件注入事件。
有关如何对注入事件进行编码的指导,请打开从现有页面生成的 Java 文件,以查看需要注入哪些组件以及将其值设置为什么。
您可以将它们打包到面板中并将其渲染状态设置为 render=#{viewScope.pageFullyLoaded}。然后在onLoad 事件中有一个XSP。设置 viewScope.pageFullyLoaded=true 的 partialRefresh 请求有点丑陋但可行。现在您可以将该代码包装到您自己的自定义控件中,这样您就可以拥有“lazyGrid”、“lazyPanel”等。
Not sure why I did not think of this before. the dynamic content control in extlib actually solves this problem. the dcc can be triggered onClientLoad both using javascript and ssjs afer the page has loaded.
one problem I am facing now is that I am already using the dcc on my site so I need to put another dcc within my dcc. and this seem to be a bit buggy. I have reported it to the extlib team on openNTF.