复制dijit小部件而不是重新创建它

时间:2014-12-22 13:06:12

标签: dojo widget clone duplication

有没有办法可以复制或克隆dijit小部件?

基本上,想法是通过最小化窗口小部件创建时间来提高页面呈现性能。

我们有一个单页面的Web应用程序,每当用户执行任何操作时,我们都不会重新加载整个页面。

事件流程如下,

  1. 主页面由浏览器加载。它包含一个dijit ContentPane,它充当主容器,并使用各种其他dijit小部件显示整个页面,如文本框,选项卡,日期字段,增强网格等。

  2. 用户执行操作(例如,点击dijit按钮)

  3. 应用程序向服务器发送ajax调用,该服务器处理按钮单击事件并生成下一页的UI。

  4. 浏览器从ajax调用接收成功响应,并调用dijit ContentPane的刷新方法。这会触发对现有窗口小部件和新窗口小部件组的破坏,并将其放置在适当的位置。 (而不是刷新整个页面)

  5. 用户再次执行某些操作,并再次调用刷新方法,该方法触发现有窗口小部件的销毁,并创建新的窗口小部件集并将其放置在适当的位置。

  6. 由于这种架构,浏览器必须销毁现有的小部件并一次又一次地重新创建它们。这会导致性能下降。

    我们的想法是让浏览器随时可以使用一组小部件克隆它们并放置在适当的位置并更新它们,而不是每次都重新创建。

1 个答案:

答案 0 :(得分:2)

是的,可以使用名为_AttachMixin的内容。

基本上没有解决这个问题,即你的小部件需要将事件监听器附加到HTML文档。可以删除的是Dijit Widget生命周期中生成DOM的时间。众所周知,简单的Dijit小部件就像一个dijit / form / Button在div里面的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的响应传递,并按照第1个链接(Ref Doc)中的示例进行操作

我们的应用程序中有很多小部件可以在客户端很好地呈现。一种不太复杂的方法是在需要时简单地显示/隐藏(而不是渲染和销毁)小部件。我假设你的应用访问策略会关注数据而不是哪个人可以访问哪个小部件。