2017-03-08 18 views
1

に私はLightSwitchのHTMLを使用していますが、私は複数のタブで画面を持っている、と私はいくつかのロジックに基づいていずれかのタブを表示したい画面の「作成」イベント:コールshowTab画面作成したイベント

myapp.MyScreen.created = function (screen) 
{ 
    if (/* some logic */) { 
     screen.showTab("TabOne"); 
    } else { 
     screen.showTab("TabTwo"); 
    } 
} 

しかし、これは私が画面を開き、エラーがスローされます。

TypeError: Cannot read property 'pageName' of undefined. 

は、誰もがこれを発生し、回避策を発見しましたか?助けのための

おかげで、

答えて

0

は、画面の作成イベントにshowTabのAPIコマンドを使用するためには、その使用は画面が完全に表示されるまで延期する必要があります。

これは、jQueryモバイルpagechange event(LightSwitch HTMLクライアントがjQueryモバイルを使用するため)とsetTimeout with a zero timeout(ロードする画面がレンダリングされるまでshowTabを遅延させる)の組み合わせを使用して実現できます。

以下は、このアプローチを使用して、例の改訂版を示しています。より高度な代替と並ん

myapp.MyScreen.created = function (screen) { 
    $(window).one("pagechange", function (e, data) { 
     setTimeout(function() { 
      if (/* some logic */) { 
       screen.showTab("TabOne"); 
      } else { 
       screen.showTab("TabTwo"); 
      } 
     }); 
    }); 
}; 

を、このアプローチは、以下の記事に私の答えで詳しく説明されています

LightSwitch Tabbed screen in Browse template

しかし、この方法は、最初の画面が完全に表示されるまでshowTabを遅らせることに基づいているため、デフォルトのタブからtで表示されるタブへの移行が顕著になります彼はshowTabメソッドです。

このような顕著な移行を避けたい場合は、LightSwitchライブラリをカスタマイズして、標準のshowScreenメソッドに新しいオプションを導入することができます。この新しいオプションを使用すると、画面を表示するときに目的のタブページ名を指定できます。

この追加オプションを導入したい場合は、HTMLクライアントのdefault.htmファイルで次の変更を行うことで、未拡張バージョンのLightSwitchライブラリを参照する必要があります。ライブラリスクリプト参照の終了):

<!--<script type="text/javascript" src="Scripts/msls-?.?.?.min.js"></script>--> 
<script type="text/javascript" src="Scripts/msls-?.?.?.js"></script> 

上記の行で疑問符を使用しているLightSwitchのバージョンに関係します。

次に、あなたのスクリプト/ MSLSにコードのセクションを検索する必要があります - showScreen関数を宣言し、次のように変更JSファイル:?。?。?。あなたができる

function showScreen(screenId, parameters, options) { 
    //return msls_shell.showScreen(
    // screenId, parameters, null, false, 
    // options ? options.beforeShown : null, 
    // options ? options.afterClosed : null); 
    return msls_shell.showScreen(
     screenId, parameters, 
     options ? options.pageName : null, 
     false, 
     options ? options.beforeShown : null, 
     options ? options.afterClosed : null); 
} 

をその後、次のように標準画面表示のいずれかの方法でこの新しいページ名オプションを使用します。

msls.application.showScreen("MyScreen", null, { pageName: "TabOne" }); 
// or 
myapp.showScreen("MyScreen", null, { pageName: "TabOne" }); 
// or 
myapp.showMyScreen(null, { pageName: "TabOne" }); 

これがデフォルトのタブから顕著な変化なしに、目的のタブに表示されている画面になります。

+0

デフォルトのタブが短く表示されているので、更新されたタブが表示されるため、回答はスムーズではありません。 – user1533706

+0

@ user1533706もっと関わっていますが、私は答えを更新して、スムーズな体験を提供するための移行 –

+0

@ user1533706興味のある方は、改訂されたアプローチを試してみて、探していたスムーズな体験を提供しましたか? –