1

ストアによって入力されるリスト アイテムがあります。ストアがロードされると、リストは適切な高さでサイズ変更されないようです。高さは実際にはゼロです。ストアを読み込んだ後にリストの高さを再計算することについて何か推奨事項はありますか?

私の見解:

            xtype: 'fieldset',
            cls: 'damage-list-fieldset',
            margin: '',
            itemId: 'damageFieldSet',
            flex: 1,
            layout: {
                type: 'fit'
            },
            items: [
                {
                    xtype: 'list',
                    action: 'showNotes',
                    cls: 'damage-list',
                    itemCls: 'x-list-item-label',
                    itemId: 'DamageList',
                    disableSelection: true,
                    height: 'auto',
                    emptyText: 'No damage has been reported',
                    itemTpl: [
                        '<table border="0" width="100%">',
                        '    <tr>',
                        '        <td class="part" width="30%">{part}</td>',
                        '        <td class="note" width="30%">{date}</td>',
                        '        <td class="type" width="30%">{type}</td>',
                        '        <td class="note" width="10%"><div class="count">{noteCount}</div></td>',
                        '    </tr>',
                        '</table>',
                        ''
                    ],
                    store: 'Damage',
                    grouped: true,
                    onItemDisclosure: false
                }
            ]
        },

itemTpl にテーブルを含めるべきではないことに気付きましたが、今は無視しましょう。

これが私が現在それを機能させる方法です。コントローラー ストア ロード コールバックから高さをプッシュします。

        Ext.getStore('Damage').load({
        params: {repairOrderId: this.repairOrderId},
        callback: function(records, operation, success) {
            if(records.length) {
                report.getComponent('noteInstruction').setHidden(records.length == 0);

                /* Calculate the height of the damage rows and set it*/
                var location = new Array();
                var locationCount = 0;
                for(var i = 0; i < records.length; i++) {
                    if(location.indexOf(records[i].data.location) < 0) {
                        location.push(records[i].data.location);
                        locationCount++;
                    }
                }
                var damageRow = 54;
                var damageHeader = 56;
                var damageHeight = (records.length * damageRow) + (locationCount * damageHeader);
                report.getComponent('damageFieldSet').getComponent('DamageList').setHeight(damageHeight);
                report.getComponent('damageFieldSet').getComponent('DamageList').setScrollable(false);
            }
            Ext.Viewport.setMasked(false);
        },
        scope: this
    });

設定された高さでジャミングしているだけなので、あまりエレガントではありません。

問題は、ストアからレコードを取得した後、リストの高さを強制的に再描画するにはどうすればよいかということです。

4

1 に答える 1

1

ロード プロセスは非同期であり、ロードからのコールバックは必ずしもリストに影響しません。

  • 高さは list.element.html から読み取ることができ、リストには既にリストがあるため、高さを計算する必要はありません。
  • Load alreadyはリストを自動的に更新します。
  • Sencha 2.2.1 のリスト コンポーネントは異なる方法で生成されます。表示されるアイテムの数に1を加えた数だけを生成し、リストアイテムの場所を切り替えます
  • height:'auto' は flex: 1 に置き換えるのが最適です

私はあなたをお勧めします

  • コールバックを削除する
  • 店舗に商品があるかどうか電話で確認する
  • listitem の高さを固定値に設定します (リストの各行の高さを設定しようとしないでください。それ以外の場合は、dataview を使用し、dataview upatedata イベントで高さを設定してください)。
  • データビューはリストよりもはるかに遅く、リストではすべてのアイテムが同じ高さであることを覚えておいてください

最後になりましたが、リスト構成で使用できます。

variableHeights: true
于 2013-08-01T10:44:18.640 に答える