有没有一种方法可以复制或克隆 dijit 小部件?
基本上,想法是通过最小化小部件创建时间来提高页面呈现性能。
我们有一个单页网络应用程序,我们不会在用户执行任何操作时重新加载整个页面。
事件流程如下,
主页由浏览器加载。它包含一个 dijit ContentPane,它充当主容器并使用各种其他 dijit 小部件(如文本框、选项卡、日期字段、增强型网格等)显示整个页面。
用户执行一个 Action (例如点击 dijit 按钮)
应用程序向服务器发送 ajax 调用,服务器处理按钮点击事件并生成下一页的 UI。
浏览器从 ajax 调用收到成功响应并调用 dijit ContentPane 的刷新方法。这会触发现有小部件的销毁,并创建一组新的小部件并将其放置在适当的位置。 (而不是刷新整个页面)
用户再次执行某些操作并再次调用刷新方法,这会触发现有小部件的销毁,并创建一组新的小部件并将其放置在适当的位置。
由于这种架构,浏览器必须销毁现有的小部件并一次又一次地重新创建它们。这会导致性能下降。
我们的想法是让一组小部件在浏览器上始终可用,将它们克隆并放置在适当的位置并更新它们,而不是每次都重新创建。
最佳答案
是的,这可以通过名为 _AttachMixin
的东西实现。
基本上,您的小部件需要将事件监听器附加到 HTML 文档这一事实是无法回避的。不过可以减少的是 Dijit Widget 生命周期中生成 DOM 的时间。众所周知,像 dijit/form/Button 这样的简单 Dijit 小部件在 div 中有一个 div 等。
这里有详细解释http://dojotoolkit.org/reference-guide/1.9/dijit/_AttachMixin.html
这是一个使用 Node.JS 作为后端的例子。 http://jamesthom.as/blog/2013/01/15/server-side-dijit
这是一个棘手的问题,而且这个概念没有得到非常详尽的解释。如果您的后端不是 Node.JS,则必须手动制作小部件字符串并将其作为对 AJAX 的响应传递,并按照第一个链接(引用文档)中的示例进行操作
我们已经在客户端很好地呈现了我们应用程序的许多小部件。一种简单得多的方法是在需要时简单地显示/隐藏(而不是渲染和销毁)小部件。我假设您应用的访问策略将关注数据,而不是哪个人可以访问哪个小部件。
关于dojo - 复制 dijit 小部件而不是重新创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603334/