2017-03-08 70 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 mobile pagechange event(因爲LightSwitch HTML Client使用jQuery mobile)和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庫(將.min從庫腳本參考的末尾):

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

上面一行中的問號將與您正在使用的LightSwitch版本相關。

然後你需要找到的一段代碼在你的腳本/ MSLS - JS文件聲明showScreen功能和更改如下:?。?。?。

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出於興趣,您是否嘗試過修改後的方法,是否提供了您期待的流暢體驗? –