2017-06-12 2 views
-1

ポリマー2.0でifをあまりにも多く持つために、より最適化されたソリューションを探しています。例えば、私はテーブルオブジェクトを構築しています。ここでは、各セルはテキスト、ボタン、リンク、オブジェクトなどです。ユーザーが2D配列を入力し、Polymer 2.0オブジェクトで使用するマークアップを選択できるようにします。私の現在の解決法(下記)は単純なif文をいくつか持っていますが、これはすべてのセルが各文を呼び出すことを意味します。これを処理するより良い方法はありますか? matchCellTypeへの呼び出しのポリマー2.0があまりにも多くifs

<template is="dom-if" if="[[matchCellType(cell, 'button')]]"> 
    <UI-Button id='[[cell.button.ID]]' class$='[[cell.button.class]]'>[[cell.button.text]]</UI-Button> 
</template> 
<template is="dom-if" if="[[matchCellType(cell, 'object')]]"> 
    <span class="object-toggle"></span>[[cell.title]] 
    <div class="properties"> 
     <template is="dom-repeat" items="[[getProps(cell)]]"> 
      <div class="properties_row"><div class="properties_cell"><b>[[item.title]]:</b></div><div style="display: table-cell">[[item.val]]</div></div> 
     </template> 
    </div> 
</template> 
<template is="dom-if" if="[[matchCellType(cell, 'link')]]"> 
    <a target="_blank" href='[[cell.link.href]]'>[[cell.link.text]]</a> 
</template> 
<template is="dom-if" if="[[matchCellType(cell, 'cell')]]"> 
    [[cell]] 
</template> 
<template is="dom-if" if="[[matchCellType(cell, 'textArea')]]"> 
    <ui-text-area rows="[[cell.textArea.rows]]" cols="[[cell.textArea.cols]]" id='[[cell.textArea.id]]' class$='[[cell.textArea.class]]' text= [[cell.textArea.text]]></ui-text-area> 
</template> 

答えて

0

多く、それはコストのかかる計算でない場合は害はありません(それがあった場合、あなたの代わりに財産上の観測者とテストにプロパティを更新する可能性が)うち

ファクターあなたのテーブルを乱雑にしないでください。

dom-ifsを使用する代わりに、セルから属性またはスタイルクラスを計算し、すべての要素を常にレンダリングし、CSSを使用して一致する要素が表示されます。これは、はるかにDOM要素を生成しますが、ブラウザは非常に効率的にhiddenまたはdisplay:none要素を扱う

の代わりに、いくつかのDOM-IFSとスタンプので、まだよりパフォーマンスすることができ、あなたが作成し、助けを命令的

+0

おかげでノードを削除することもできます! 元々行とセルにサブコンポーネントを使用しようとしましたが、テーブル全体が間違って見えましたが、私はまだ実装を計画しています。 matchCellTypeはifの単純なセットです。 すべてをレンダリングして隠すことは、私が思っていたとは思わないものです。それはちょっとしたアイデアです。 私の主な関心事は、このような構造が遅く、非効率的であるということです。大規模なデータセットであっても、実際にはパフォーマンスは賢明です。私はちょっとこれを追加したいのですが、これは悪い解決策のように思えます。 – mpavlis

+0

..慎重に実行したときに動作する Markus

関連する問題