0

我在转换到该页面之前尝试在移动页面上设置值时遇到问题。

我有一个基于 Tony McGuckin 的 OpenNTF XSnippet 的脚本块。http://openntf.org/XSnippets.nsf/snippet.xsp?id=calling-server-side-jscode-during-mobile-page-transitions

因此,当我转换到 ID 为“appPage3”的页面时,如果是 JSON-RPC 服务,我将调用方法“facilityCheckIn”。

我正在尝试在 viewScoped 托管 bean 中设置值,并且为了进行测试,我正在尝试设置普通的 viewScope 变量。

尽我所能告诉移动页面没有接受更改。它根本没有显示 viewScope。我不确定那是怎么回事。我相信托管 bean 正在获得它的价值,但它就像页面首先呈现。移动页面上的值第一次是空白的,然后如果我刷新或退出并返回到它确实显示的页面。我尝试通过 SSJS 和 EL 访问 bean。

当我进入和离开页面时,我真的需要能够为移动页面设置值。

任何意见,将不胜感激。

谢谢!!

我更新了下面的代码以显示完整的移动页面。我没有为应该显示字段但可以在必要时显示字段的自定义控件添加任何内容。

我创建了一个 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>

4

3 回答 3

0

前段时间我遇到了类似的问题,我不得不创建另一个 XPage(带有一个 SingleApplication)来导航,而不是仅仅跳转到同一个 SingleApplication 中的一个 appPage。

不理想,但是,它也为我解决了另一个问题,因为我希望能够直接跳转到有问题的页面(使用二维码).. ;-)

/约翰

PS。将在此处跟踪您的发现,看看是否可以完成。移动控件的这种问题(我也有一些提前输入的问题)有点把我推向其他框架的方向,现在,无论如何......

于 2013-03-28T12:22:13.170 回答
0

好的,我相信我已经解决了这个问题。我没有使用 Tony 的 XSnippet 中的 RPC 控制内容。你离开页面的工作,但如果你进入。这似乎可以按需要工作。

要处理输入,您需要将代码放在标题的 Rendering 事件中。

于 2013-04-05T23:19:10.167 回答
0

大卫....您说刷新确实解决了问题,斯蒂芬还提到转换到新页面发生在结果从 RPC 返回之前发生,我认为这是正确的。因此,在您的回调中,虽然不是最佳的,但至少可以让您继续前进,您可以使用以下方法触发部分刷新:

XSP.partialRefreshGet("#{id:appPage3}",{});
//I've had partial success with the "#{id:appPage3}" call, so I usually use a full
// dojo query like:
var appPageId = dojo.query("[id$='appPage3']")[0].id

我不知道这是否会纠正您的问题,但似乎一切正常,除了填充该值。

于 2013-04-04T01:27:46.323 回答