1

渲染 dijit 小部件的最快方法是什么?我知道编程方式比声明方式更快。(一些参考

我有一个加载太慢的自定义小部件(它是一个带有组合框、按钮和其他用于添加过滤器等的小型 dijit 小部件的数据网格)。
查看源代码,我看到所有 dijit 小部件都是以编程方式创建的,但插入它们的 DOM 节点也是以编程方式创建的。这是“正确”的方式吗?

我正在尝试加快这个小部件的渲染速度,目前我的选择是结合速度模板(我的公司使用 struts2 + velocity)来创建 DOM 节点,以及以编程方式创建的小部件(使用 placeAt 和类似方法插入将小部件放入已构建的 DOM 节点中)。
它可以正常工作,但遗憾的是所有 css 类都被 dijit 覆盖,所以我必须再次覆盖它们,这会导致合理的开销

在模板中我写了这样的东西:

<input id="idOfAnExistingDomNode" class="myCssClass" />

要在该 DOM 节点中插入 FilteringSelect,我必须这样写:

var fieldSelect = new dijit.form.FilteringSelect({
    store : jsonStore,
    searchAttr : "caption",
    labelAttr : "caption",
    selectOnClick : true,
    value : "Content"
}, "idOfAnExistingDomNode");
fieldSelect.domNode.className += " myCssClass";

最后一行是必需的,因为 myCssClass 在创建 FilteringSelect 期间被覆盖。
有没有办法避免这个问题?
或者,也许,我试图以错误的方式做这件事?我不完全确定“速度模板”的事情。

注意:Dojo 版本是 1.5,不,遗憾的是我们不能将它升级到更新的版本。

请原谅我糟糕的英语。

4

1 回答 1

0

通常,实例化小部件的更快方法之一是在临时 div 中创建它们,然后将该 div 移动到 DOM 上。您是否尝试过分析此实例化中到底是什么慢?我的一部分想知道是否花费了太多时间来等待数据,因为一些小部件 + 具有合理页面大小参数的网格应该不会花费很长时间来加载。

至于您的班级问题,奇怪的是dojo没有混入现有班级。也就是说,您可以先在节点上进行查找,获取类属性,然后在创建 FilteringSelect 时将其指定为您的 mixin 对象中的类属性。如果这样做,请确保将类括在引号中,否则较旧的 IE 将拒绝它。

于 2012-12-20T01:16:52.363 回答