渲染dijit小部件的最快方法

时间:2012-12-19 13:38:32

标签: css render dojo

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

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

我正在尝试加快这个小部件的渲染,目前我的选择是结合速度模板(我的公司使用struts2 + velocity)来创建DOM节点,用< strong>以编程方式创建的小部件(使用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";

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

注意:Dojo版本是1.5而不是,遗憾的是我们无法将其升级到更新版本。

请原谅我的可怕英语。

1 个答案:

答案 0 :(得分:0)

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

至于你的课程问题,很奇怪dojo没有混合现有的课程。也就是说,您可以先在节点上进行查找,获取类属性,然后将其指定为 创建FilteringSelect时mixin对象中的class属性。如果你这样做,一定要用引号括起来,否则旧的IE会拒绝它。