0

OSX Lion の 64 ビット Eclipse Juno で Worklight Studio 6.0.0.20130917-1749 を使用しています。

WL.Client.invokeProcedure() または WL.Logger.debug() を jQueryMobile (1.3.1) pagebeforeshow ハンドラに呼び出すと、リッチ ページ エディタのデザイン部分がそのページに切り替えようとするとハングします。

$("#myPage").on("pagebeforeshow", function(){WL.Logger.debug("loading myPage...");});

モバイル ナビゲーション ビューで myPage をダブルクリックすると、ページが表示されず、アプリ内の他のページに切り替えることも、デザイン ペインで何かを行うこともできません。更新ボタンはそれを修正しません (同じページを読み込もうとするだけで、開始した場所に戻ります) 私ができる唯一のことは、html ファイルを閉じて再度開くことです。

これは、RPE で実行されるコードで WL.StaticAppProperites の定義が欠落していることが原因のようです。クロムの下でアプリの共通リソースの html ソースを見ると、次の定義が表示されます。

<script>
// Define WL namespace.
var WL = WL ? WL : {};
/**
 * WLClient configuration variables.
 * Values are injected by the deployer that packs the gadget.
 */
WL.StaticAppProps = {
   "APP_DISPLAY_NAME": "MyApp",
   "APP_ID": "MyApp",
   "APP_SERVICES_URL": "\/MyApp\/apps\/services\/",
   "APP_VERSION": "1.0",
   "ENVIRONMENT": "preview",
   "LOGIN_DISPLAY_TYPE": "popup",
   "LOGIN_POPUP_HEIGHT": 610,
   "LOGIN_POPUP_WIDTH": 920,
   "PREVIEW_ENVIRONMENT": "common",
   "WORKLIGHT_PLATFORM_VERSION": "6.0.0",
   "WORKLIGHT_ROOT_URL": "\/MyApp\/apps\/services\/api\/MyApp\/common\/"
};</script>

さまざまな環境用に生成された HTML には、同様の定義があります。しかし、weinre を見ると、RPE に表示される html に対応するスクリプトが挿入されていないことがわかります。WL.StaticAppProperties の定義がないため、worklight.js のコードが WL.Utils の定義の直前で失敗します。

WL.StaticAppProps = {} を追加して、worklight.js をロードするために挿入されるコードの前にこれを追加する方法はありますか?

この問題の他の回避策はありますか?

4

1 に答える 1

1

エディターはその WL.StaticAppProps プロパティを内部で定義していますが、実行中のページのようなインライン スクリプト ブロックではなく、追加の挿入された .js ファイルにあります。エディターのマークアップ内のそのスクリプトの場所が間違っている可能性があり、調査します。

ただし、ここにはさらに大きな問題があります。それは、エディター内のページが Worklight サーバーを呼び出すことができないということです。エディターは、プレビュー サーバーが公開されて開始されているかどうかに関係なく常に動作する必要があるため、独自のメカニズムを使用して Web リソースをデザイン ペインに読み込みます。したがって、起点サーバーはWorklight 開発サーバーではなく、サーバー・サイドのロジックへの呼び出しを試みても応答がありません。これがハング シナリオの原因である可能性が高いと思います。

一般的な推奨事項は、エディターを使用してページの UI マークアップを作成し、UI が一般的に完成した後でサービス呼び出しの接続を開始することです。その時点で、アプリケーションのプレビューは、モバイル ブラウザー シミュレーターやネイティブ デバイスのテストに移行する可能性があります。エディターでインクリメンタルな UI 作業を継続するために、次のような一時的な条件付きロジックを追加して、設計作業中にサーバー呼び出しを回避 (またはモックアップ) することもできます。

var designMode = true;   // switch to false for real server preview
if(!designMode) {
    // your service invocations here
}
于 2013-10-15T14:08:13.363 に答える