0

いくつかのビュー (リスト、カルーセル、データビュー) に 1 つのストアを使用する場合があり、ストア データを更新 (ロード、フィルター) すると、このストアを使用するすべてのビューの DOM が再構築されますが、一部のビューは表示されません。これらのデータでは表示されない場合があります。更新を保存するたびにではなく、表示された場合にのみリストdomを更新するにはどうすればよいですか? 出題例

Ext.define("Test.view.Main", {
    extend: 'Ext.tab.Panel',
    config: {
        tabBarPosition: 'bottom',

        items: [ ]
    },

    constructor : function(){
        this.callParent(arguments);
        var store = Ext.create('Ext.data.Store',{
                data :[
                    {title : 'One'},
                    {title : 'Two'},
                    {title : 'Three'}
                ]
            }),
            firstList = Ext.create('Ext.List',{
                title : 'tab1',
                store : store,
                itemTpl : '{title}',
                onItemDisclosure : function(){
                    store.add({title : 'Four'});
                }
            }),

            secondList = Ext.create('Ext.List',{
                title : 'tab2' ,
                store : store,
                itemTpl : '{title}'

            }),

             thirdList = Ext.create('Ext.List',{
                title : 'tab3',
                store : store,
                itemTpl : '{title}'

            });

        this.add([
            firstList,
            secondList,
            thirdList
        ]) ;
    }
});

最初のリストのアイテムをタップすると、ストアに新しいアイテムが追加されます。そして、すべてのリストの DOM が変更されますが、2 番目と 3 番目のリストは表示されませんが、1 つのオプションが表示されます。メイン ストアを 1 つ作成し、ビューごとに個別のストアを作成します。ビュー ショーのときは、本店からストアを埋めます。しかし、それは良くありません。他のアイデアはありますか?

4

1 に答える 1

2

私の知る限り、「すぐに使える」ソリューションはありません。ドキュメントによると、更新イベントは回避可能ですが、私はその理論をテストしていません。

もう 1 つのアイデアは、データビュー ソースを見て、その一部をオーバーライドすることです。

出発点は、おそらくそこにあるストア イベント フックを調べることです。

storeEventHooks: {
    beforeload: 'onBeforeLoad',
    load: 'onLoad',
    refresh: 'refresh',
    addrecords: 'onStoreAdd',
    removerecords: 'onStoreRemove',
    updaterecord: 'onStoreUpdate'
}

ただし、それを完成させるのはおそらく退屈な作業です。

一方、新しいレコードを追加するときは、他のリストの DOM を更新するべきではありません。各リストに新しいリスト項目を追加するだけなので、addrecords イベントを無効にしてから、他のリストが更新されたときに完全に更新する必要があります。表示されている場合、おそらくより効果的ではないでしょうか?

于 2012-09-24T21:36:24.920 に答える