2013-01-15 20 views
0

當我更新與Sencha Touch列表(Ext.dataview.List)關聯的商店時,列表UI將自動更新(如在MVVM中)。使Sencha Touch列表(或ExtJS Grid)不遵守商店和自動更新UI?

我正在創建一個移動應用程序,其中有大量數據通過websocket進入,並且商店經常更新。我相信,即使只有一個字段發生變化,整個列表項目也會被重新渲染(使用itemTpl)。正如你可能想象的那樣,這非常慢,我的應用嚴重滯後。

我想通過列表禁用這個「觀察」商店,並使用innerHTML自己更新列表項。有沒有辦法做到這一點?或者有沒有更新商店而不更新用戶界面的方法?

我的其他選擇是節流數據,但這是最後的手段。

回答

1

您想要使用suspendEvents和resumeEvents方法。這些通過Observable mixin提供,可用於商店和列表。使用suspendEvents停止任何事件(如刷新列表)和resumeEvents以再次開始偵聽。當恢復事件時,任何在暫停期間觸發的事件都會排隊等待再次觸發,所以如果您想放棄這些事件,則需要確保執行suspendEvents(false)。

通過innerHTML手動更新會是一個巨大的痛苦,我會建議您只是在加載商店時執行suspendEvents,並且每當您想更新列表時只需resumeEvents並從商店手動刷新它。

請參閱this link以供進一步閱讀。

+0

這正是我最終做的......我正在使用suspendEvents(true)和resumeEvents()。但是,該列表需要頻繁更新(每秒多次),以便從商店刷新它不可行,因此我必須手動更新DOM。 –

+0

我認爲suspendEvents(true)會排隊暫停事件,並仍然在resumeEvents觸發它們。你可能不想要這樣做,因爲你最終會無緣無故地重複刷新列表。 – OhmzTech

+0

另外,如果您每秒要在一個大列表中手動更新DOM,請注意性能....您是否探索過使用模板成員函數? – OhmzTech