0

モバイルページに移行する前に、そのページに値を設定しようとすると問題が発生します。

TonyMcGuckinのOpenNTFXSnippetに基づくスクリプトブロックがあります。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

しばらく前に同様の問題に直面し、同じSingleApplication内のappPageにジャンプするのではなく、別のXPage(SingleApplicationを使用)を作成して移動する必要がありました。

理想的ではありませんが、(QRコードを使用して)問題のページに直接ジャンプできるようにしたかったので、別の問題も解決しました。.;-)

/ジョン

PS。ここであなたの発見に従って、それができるかどうかを確認します。モバイルコントロールに関するこの種の問題(私は先行入力もありました)は、とにかく、今のところ、他のフレームワークの方向に私を押し進めました...

于 2013-03-28T12:22:13.170 に答える
0

David ....更新を行うことで問題が修正されたとおっしゃいましたが、Stephanは、新しいページへの移行は、正しいと思う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 に答える
0

わかりました。これは解決したと思います。TonyのXSnippetのRPCコントロールを使用することはできませんでした。それはあなたがページを離れるということでうまくいきますが、あなたが入るときはそうではありません。これは希望どおりに機能するようです。

入力に対処するには、ヘッダーのRenderingイベントにコードを配置する必要があります。

于 2013-04-05T23:19:10.167 に答える