2017-04-12 6 views
-1

ディアーズ、私の画面でLightSwitchのHTML無限スクロールバグ

私はそれの内側に2列レイアウトのAとBがあり、列は「コンテナへのストレッチ」の高さで「ルート」をレイアウト持って、両方の高さを持っています「コンテナへのストレッチ」も。 AおよびBのそれぞれには、数万のレコードのテーブルコントロール(グリッド)が含まれています。これは、LightSwitchが結果をページングし、一番下にスクロールし、次に45レコードなどをフェッチするまで、一度に45レコードしかフェッチしないのでOKです(無限スクロール)

注:両方のグリッドは、 「コンテンツに合わせる」

しかし、レイアウトAのisVisible = false(デザイナまたはpostRenderメソッド:contentItem.isVisible = false)を設定してアプリを実行しようとすると、Bは予想どおり水平スペース全体を占めるようになりますが、 Bは、下にスクロールしなくても、レコードの取得をいつ実行するかわかりません。アプリが応答を停止してブラウザがクラッシュするまで、45レコード後に45レコードを取得し続けます。 Bを非表示にしてAを表示すると、Aの表と同じ動作が発生します。

LightSwitch JSファイルの問題をトレースしてみました。そして、私たちは満足できる回避策を思いつくことができませんでした。

誰もこの奇妙な動作に遭遇し、解決策を見つけましたか?このような複数のレイアウトのタブのような機能を実装し、他のものに対してisVisible = falseを設定することで一度に1つずつ表示する必要があります。

答えて

1

この欠陥は、MicrosoftのLightSwitchライブラリのtryLoadMoreEntities関数にあるようです。

この関数は、テーブルの高さをビュー領域の高さ(scrollHelper.viewHeight)と比較することによって、テーブルに追加する項目を増やす必要があるかどうかを判断します(needMoreItems)。

残念ながら、テーブルのサイズが「コンテンツに合わせる」で非表示になっている場合、テーブルの高さはゼロと評価され、loadMoreEntitiesメソッドを呼び出すと、より多くのアイテムがロードされます。

これを言って、あなたは次のようにこの機能を改訂することにより、この欠陥を修正することができるはずです。

function tryLoadMoreEntities(table) { 
    var collection = table._collection; 
    if (!collection) { 
     return; 
    } 
    if (collection.state === _VisualCollectionState.idle) { 
     var scrollHelper = table._scrollHelper, 
      needMoreItems = 
       table.data._isActivated && 
       table._tableElement.is(":visible") && 
       table._tableElement.height() - scrollHelper.viewTop < 
        2 * scrollHelper.viewHeight; 
     if (needMoreItems) { 
      loadMoreEntities(table); 
     } else { 
      endLoading(table); 
     } 
    } 
} 

この改訂版は、あなたがしている継続的なロードを防ぐ必要があり、テーブル要素の可視性の追加のチェックを紹介します体験している。

+0

私はあなたに十分な感謝、クリス、それを修正したことはできません。 2つの 'tryLoadMoreEntities'関数(リストビューのもう1つの関数)があり、両方とも同じ方法で修正できることに注意してください。 – user1533706

+0

親愛なるクリス様、この質問をご覧ください。 com/questions/43407557/lightswitch-html-root-screen-layout-the-the-screen-height-when-the-its-height – user1533706

+0

今日は後で見てみましょう。 –

関連する問題