0

我在 OSX Lion 上的 64 位 Eclipse Juno 中使用 Worklight Studio 6.0.0.20130917-1749。

我发现如果我在 jQueryMobile (1.3.1) pagebeforeshow 处理程序中调用 WL.Client.invokeProcedure(),甚至 WL.Logger.debug(),它会导致富页面编辑器的设计部分当我尝试切换到该页面时挂起。

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

如果我在“移动导航”视图中双击 myPage,则该页面不会显示,并且我无法切换到应用程序中的任何其他页面,或对他的设计窗格执行任何操作。刷新按钮并没有解决它(它只是试图加载相同的页面,我就回到了我开始的地方)我唯一能做的就是关闭 html 文件并重新打开它。

这似乎是由于在 RPE 中运行的代码中缺少 WL.StaticAppProperites 定义造成的。如果我在 chrome 下查看应用程序的公共资源的 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 回答