У меня возникла проблема с попыткой установить значения на мобильной странице перед переходом на эту страницу.Как обновить Beans или Scoped Variables при переходе в XPages Mobile Controls
У меня есть скриптовый блок, основанный на OpenNTF XSnippet Тони МакГаккина. http://openntf.org/XSnippets.nsf/snippet.xsp?id=calling-server-side-jscode-during-mobile-page-transitions
Поэтому, когда я перехожу на страницу с идентификатором «appPage3», я вызываю метод «facilityCheckIn», если служба JSON-RPC.
Я пытаюсь установить значение в управляемом компоненте viewScoped и для тестирования пытаюсь установить обычную переменную viewScope.
Насколько я могу судить, мобильная страница не подбирает изменения. Он вообще не показывает viewScope. Я не уверен, что с этим. Я считаю, что управляемый bean-компонент получает его значение, но это похоже на то, что страница сначала отображается. Значение на странице «Мобильный» пуст в первый раз , а затем, если я либо обновляюсь, либо выхожу и возвращаюсь на страницу, которую он отображает. Я попытался получить доступ к компоненту через SSJS и EL.
Мне действительно нужно иметь возможность устанавливать значения для мобильных страниц по мере перехода на страницу и из нее.
Любые советы будут оценены.
Спасибо!
Я обновил код ниже, чтобы отобразить полную страницу для мобильных устройств. Я не включил ничего для настраиваемого элемента управления, который должен отображать поля, но может при необходимости.
Я создал 6-минутное видео, демонстрирующее проблему, и это также показывает весь соответствующий код.
http://traffic.libsyn.com/notesin9/SO-Question.mp4
Спасибо !!!
<xp:this.resources>
<xp:styleSheet href="/.ibmxspres/dojoroot/dijit/themes/tundra/tundra.css"></xp:styleSheet>
<xp:styleSheet href="/mobile.css"></xp:styleSheet>
</xp:this.resources>
<xc:ccDebugToolbar defaultCollapsed="false"
collapseTo="left"></xc:ccDebugToolbar>
<xe:singlePageApp id="singlePageApp1"
selectedPageName="home">
<xe:djxmHeading id="djxmHeading1" label="My Inventory"></xe:djxmHeading>
<xe:appPage id="homeID" pageName="home">
<xe:djxmHeading id="djxmHeading2" label="My Inventory">
</xe:djxmHeading>
<xc:mob_menu_home></xc:mob_menu_home>
</xe:appPage>
<xe:appPage id="appPage2" pageName="facility" resetContent="true">
<xc:mob_menu_facility></xc:mob_menu_facility>
</xe:appPage>
<xe:appPage id="appPage8" pageName="show" resetContent="true">
<xc:mob_menu_show></xc:mob_menu_show>
</xe:appPage>
<xe:appPage id="appPage3" pageName="facilityCheckIn"
resetContent="true">
<xc:mob_page_CheckInOut header="Check In at Facility"
scanType="Receiving" scanLocation="Facility">
</xc:mob_page_CheckInOut>
</xe:appPage>
<xe:appPage id="appPage5" pageName="facilityCheckOut"
resetContent="true">
<xc:mob_page_CheckInOut header="Check Out from Facility"
scanType="Shipping" scanLocation="Facility">
</xc:mob_page_CheckInOut>
</xe:appPage>
<xe:appPage id="appPage6" pageName="showCheckOut"
resetContent="true">
<xc:mob_page_CheckInOut header="Check Out from Show"
scanType="Shipping" scanLocation="Show">
</xc:mob_page_CheckInOut>
</xe:appPage>
<xe:appPage id="appPage7" pageName="showCheckIn"
resetContent="true">
<xc:mob_page_CheckInOut header="Check In at Show"
scanType="Receiving" scanLocation="Show">
</xc:mob_page_CheckInOut>
</xe:appPage>
<!-- SUB PAGES -->
<!-- GET MANIFEST Page -->
<xe:appPage id="appPage4" pageName="manifest" resetContent="true">
<xc:mob_page_Manifest></xc:mob_page_Manifest>
</xe:appPage>
</xe:singlePageApp>
<xe:jsonRpcService id="jsonRpcService1" serviceName="appService">
<xe:this.methods>
<xe:remoteMethod name="setCurrentPage">
<xe:this.arguments>
<xe:remoteMethodArg name="pageName"></xe:remoteMethodArg>
<xe:remoteMethodArg name="direction"></xe:remoteMethodArg>
</xe:this.arguments>
<xe:this.script><![CDATA[print("PageName " + pageName);
print("Direction " + direction);
viewScope.put("vsPage", "test");
App.setCurrentPage(pageName);
App.setCurrentDirection(direction);
return "";]]></xe:this.script>
</xe:remoteMethod>
</xe:this.methods>
</xe:jsonRpcService>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[
XSP.addOnLoad(function(){
// Begin App Page 1
var newPage = dijit.byId("#{id:appPage3}");
if(null != newPage){
dojo.connect(newPage, "onBeforeTransitionIn", function(){
var deferred = appService.setCurrentPage("facilityCheckIn", "onBeforeTransitionIn");
deferred.addCallback(function(result) {
console.log(result);
});
});
dojo.connect(newPage, "onBeforeTransitionOut", function(){
var deferred = appService.setCurrentPage("facilityCheckIn", "onBeforeTransitionOut");
deferred.addCallback(function(result) {
console.log(result);
});
});
dojo.connect(newPage, "onAfterTransitionIn", function(){
var deferred = appService.setCurrentPage("facilityCheckIn", "onAfterTransitionIn");
deferred.addCallback(function(result) {
console.log(result);
});
});
dojo.connect(newPage, "onAfterTransitionOut", function(){
var deferred =appService.setCurrentPage("facilityCheckIn", "onAfterTransitionOut");
deferred.addCallback(function(result) {
console.log(result);
});
});
}
// End App Page 1
// Begin Home Page
var newPage = dijit.byId("#{id:homeID}");
if(null != newPage){
//console.log("Inside home Page")
dojo.connect(newPage, "onBeforeTransitionIn", function(){
var deferred = appService.homePageReset();
deferred.addCallback(function(result) {
console.log(result);
});
});
dojo.connect(newPage, "onBeforeTransitionOut", function(){
var deferred = appService.homePageReset();
deferred.addCallback(function(result) {
console.log(result);
});
});
}
// END Home Page
// Insert new Code ABOVE THIS LINE
}); // This ends the block that holds all the functions
]]></xp:this.value>
</xp:scriptBlock>
Я не вижу свой вызов в коде выше? Итак, предположим: RPC-вызов асинхронный, поэтому переход на новую страницу произошел до того, как результаты вернутся. И страница с переходом тоже не разговаривает с сервером. Мое понимание заключается в том, что в этом суть приложений с одной страницей: минимизировать трафик с/на сервер – stwissel
Что вы пытаетесь сделать здесь? Или, скорее, как бы конечный пользователь описал поведение, если он сработал? JSON-RPC + dojo.connect - это ваш «Как» ... что твой «Что?» :) –
Tim - Цель состоит в том, чтобы настроить виртуальную страницу при переходе на нее. Поэтому, если я перейду к настройке страницы, будут использоваться переменные bean или scoped, поэтому открываемая страница - using resetContent = true - может использовать любой из параметров. Например, кнопка «Назад» - я хотел бы вычислить это, чтобы перейти на первую страницу, которая может измениться. Только один пример. Я бы хотел много вычислить. –