1

dijitウィジェットをレンダリングする最速の方法は何ですか?プログラムによる方法は宣言型よりも速いことを私は知っています。(参考文献

読み込みが遅すぎるカスタムウィジェットがあります(これは、コンボボックス、ボタン、およびフィルターの追加に使用されるその他の小さなdijitウィジェットなどを備えたデータグリッドです)。
ソースを見ると、すべてのdijitウィジェットがプログラムで作成されていることがわかりますが、それらが挿入されるDOMノードもプログラムで作成されています。それは「正しい」方法ですか?

このウィジェットのレンダリングを高速化しようとしています。現在、速度テンプレート(私の会社ではstruts2 + speedを使用)とプログラムで作成されたウィジェット(placeAtおよび同様のメソッドを使用して挿入)を組み合わせてDOMノードを作成することを選択します。すでに構築されている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であり、残念ながら、新しいバージョンにアップグレードすることはできません。

私のひどい英語を許してください。

4

1 に答える 1

0

多くの場合、ウィジェットをインスタンス化するより高速な方法の 1 つは、ウィジェットを一時的な div に作成し、その div を DOM に移動することです。このインスタンス化で何が遅いのかをプロファイリングしてみましたか? いくつかのウィジェット + 適切なページサイズのパラメーターを持つグリッドの読み込みに時間がかからないため、データの待機に時間がかかりすぎているのではないかと考えている人もいます。

クラスの問題についてですが、道場が既存のクラスに混ざっていないのは奇妙です。そうは言っても、最初にノードでルックアップを行い、class 属性を取得してから、FilteringSelect を作成するときに mixin オブジェクトでそれを class 属性として指定することができます。そうする場合は、必ずクラスを引用符で囲んでください。そうしないと、古い IE で拒否されます。

于 2012-12-20T01:16:52.363 に答える